{
  "_format": "hh-sol-artifact-1",
  "contractName": "AllocateHandler",
  "sourceName": "contracts/V3/handler/AllocateHandler.sol",
  "abi": [
    {
      "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"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "claimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "getClaimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "areaNameList",
          "type": "string[]"
        }
      ],
      "name": "getEngineAreaList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIOBranches",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8[]",
              "name": "inBranch",
              "type": "uint8[]"
            },
            {
              "internalType": "uint8[]",
              "name": "outBranch",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IHandler.IOBranch[]",
          "name": "branches",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getInputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getOutputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getRuleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "cmd",
              "type": "uint8"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.StateParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getTokenBranch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[]",
              "name": "valueList",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranch",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "poolFee",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clusterArea",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "lastHandler",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "valueTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint32",
                  "name": "taskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "parentTaskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "clusterId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint32",
                          "name": "attrId",
                          "type": "uint32"
                        },
                        {
                          "internalType": "int40",
                          "name": "attrAmount",
                          "type": "int40"
                        }
                      ],
                      "internalType": "struct Attribute.AttributeIn[]",
                      "name": "attrInList",
                      "type": "tuple[]"
                    }
                  ],
                  "internalType": "struct Token.Token[]",
                  "name": "inTokenList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "bytes",
                  "name": "args",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Task.Task",
              "name": "task",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct Handler.Process",
          "name": "param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "preResult",
          "type": "tuple"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "randomGenerator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "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": "regRule",
      "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": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "regRuleGroupSlotArgs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleConfig",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "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"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "cmd",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "updateArgs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50615224806100206000396000f3fe608060405234801561001057600080fd5b506004361061012d5760003560e01c80638129fc1c116100b35780638129fc1c1461023f5780638da5cb5b1461024757806395edcb081461026c578063a903620c1461028c578063af84b51f1461029f578063b41bd789146102bf578063b4b70352146102d2578063d0d35b55146102e5578063dcbad90d146102f8578063f2fde38b1461030b578063f2fe4fa51461031e578063f96f58271461032d57600080fd5b80631cc4f041146101325780631eda6e4f1461015a57806334c76b251461017a578063394a7398146101a75780634b2dbcb8146101ba5780634b2e9b41146101da57806354fd4d50146101ed5780635790c294146101fc57806362329cc5146102115780636dabaf0414610224578063715018a614610237575b600080fd5b61014561014036600461362c565b61036e565b60405190151581526020015b60405180910390f35b61016d610168366004613771565b61044e565b604051610151919061382a565b604080518082019091526008815267416c6c6f6361746560c01b60208201525b60405161015191906138d6565b61019a6101b53660046138e9565b6104e4565b6101cd6101c8366004613902565b61057e565b6040516101519190613989565b6101cd6101e8366004613902565b610620565b60405160018152602001610151565b61020f61020a3660046139ca565b6106c0565b005b6101cd61021f366004613a5d565b610795565b610145610232366004613b0d565b610872565b61020f610a5a565b61020f610a6e565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610151565b61027f61027a366004613da4565b610b7f565b6040516101519190613f74565b61020f61029a3660046146d1565b610eef565b6102b26102ad366004614884565b610f6c565b60405161015191906149a1565b61020f6102cd366004614a03565b6110c2565b6101456102e036600461362c565b611232565b61019a6102f3366004614a37565b61142d565b606954610254906001600160a01b031681565b61020f610319366004614a7e565b61150b565b60606040516101519190614ad9565b61035661033b3660046138e9565b606a602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610151565b60008061039c836000015184602001518560600151866040015187608001518860a001518960e00151611581565b6000818152606c60209081526040808320815181548085028201840184529381018481529596509394909284928491908401828280156103fb57602002820191906000526020600020905b8154815260200190600101908083116103e7575b505050505081525050905060008060ff168560c0015160ff1614156104325761012085015161042b9083906115f0565b9050610446565b610120850151610443908390611685565b90505b949350505050565b604080516020810190915260608152600061046e8a898989898e89611581565b6000818152606c602090815260409182902082518154808402820185018552928101838152949550939092849284918401828280156104cc57602002820191906000526020600020905b8154815260200190600101908083116104b8575b50505050508152505091505098975050505050505050565b606b60205260009081526040902080546104fd90614b5e565b80601f016020809104026020016040519081016040528092919081815260200182805461052990614b5e565b80156105765780601f1061054b57610100808354040283529160200191610576565b820191906000526020600020905b81548152906001019060200180831161055957829003601f168201915b505050505081565b6060600087878787878760405160200161059d96959493929190614b93565b60408051601f1981840301815282825280516020918201206000818152606e8352839020805480840286018401909452838552909450919083018282801561060e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105f0575b50505050509150509695505050505050565b6060600087878787878760405160200161063f96959493929190614b93565b60408051601f1981840301815282825280516020918201206000818152606d8352839020805480840286018401909452838552909450919083018282801561060e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105f05750505050509150509695505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506067816040516106f89190614bd6565b90815260405190819003602001902054336001600160a01b039091161461073a5760405162461bcd60e51b815260040161073190614bf2565b60405180910390fd5b6000338686866040516020016107539493929190614c29565b60408051601f1981840301815291815281516020928301206000818152606b845291909120855191935061078c929091908601906132ee565b50505050505050565b6060600082516001600160401b038111156107b2576107b261348a565b6040519080825280602002602001820160405280156107db578160200160208202803683370190505b50905060005b815181101561086b5760678482815181106107fe576107fe614c5c565b60200260200101516040516108139190614bd6565b9081526040519081900360200190205482516001600160a01b039091169083908390811061084357610843614c5c565b6001600160a01b039092166020928302919091019091015261086481614c88565b90506107e1565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506067816040516108b39190614bd6565b90815260405190819003602001902054336001600160a01b03909116146108ec5760405162461bcd60e51b815260040161073190614bf2565b60ff841615806108ff575060ff84166001145b15610a4d57600061090f846116fc565b9050600061091e856000611711565b905060006003905060018351111561093e5761093b866001611711565b90505b6069546040516331048c1760e11b815263ffffffff8c16600482015261ffff808c1660248301528a16604482015260ff831660648201526001600160a01b0390911690636209182e90608401600060405180830381600087803b1580156109a457600080fd5b505af11580156109b8573d6000803e3d6000fd5b505050506000338b8b8b6040516020016109d59493929190614ca3565b60408051601f1981840301815291815281516020928301206000818152606a909352908220549092506001600160801b031690610a1b90829060ff871690600890611769565b6000928352606a602052604090922080546001600160801b0319166001600160801b0390931692909217909155505050505b5060019695505050505050565b610a6261178e565b610a6c60006117e8565b565b600054610100900460ff1615808015610a8e5750600054600160ff909116105b80610aa85750303b158015610aa8575060005460ff166001145b610b0b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610731565b6000805460ff191660011790558015610b2e576000805461ff0019166101001790555b610b3661183a565b8015610b7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610b87613372565b60405180604001604052806006815260200165456e67696e6560d01b815250606781604051610bb69190614bd6565b90815260405190819003602001902054336001600160a01b0390911614610bef5760405162461bcd60e51b815260040161073190614bf2565b610bf7611869565b308352608084015160ff16610c1757610c10848461187f565b9250610ee7565b608084015160ff1660011415610ee7576000610c368560600151611887565b9050805160001480610c49575080516001145b15610d6d57606954606086015160208101516101008201516001600160a01b039093169263063738cb92610c7c90611893565b610c898a606001516118b2565b60208b015160608c015160c001518c516040516001600160e01b031960e08a901b168152610cc09796959493929190600401614cd6565b602060405180830381600087803b158015610cda57600080fd5b505af1158015610cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d129190614d22565b15610d2357600a6020850152610d64565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918601526001908501525b8392505061086b565b6060850151600090610d8990610d849084846118d7565b611924565b905060ff8116600a1415610eb757606954606087015160208101516101008201516001600160a01b039093169263063738cb92610dc590611893565b610dd28b606001516118b2565b60208c015160608d015160c001518d516040516001600160e01b031960e08a901b168152610e099796959493929190600401614cd6565b602060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190614d22565b15610e6c57600a6020860152610ead565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918701526001908601525b849350505061086b565b60ff81161580610eca575060ff81166064145b15610ee457610eda868683611971565b6064602082015294505b50505b509092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606781604051610f2e9190614bd6565b90815260405190819003602001902054336001600160a01b0390911614610f675760405162461bcd60e51b815260040161073190614bf2565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015610fad57600080fd5b505afa158015610fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe59190614d44565b604080850151606086015160808701519251611005949390602001614ca3565b60408051601f1981840301815282825280516020918201206000818152606a90925291902054637c84493760e11b83529092506001600160801b03169073__$2c2f449ee1414632ca928a7ef80a41533f$__9063f908926e9061106e9087908590600401614d61565b60006040518083038186803b15801561108657600080fd5b505af415801561109a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104469190810190614e89565b6110ca61178e565b60005b81518110156111cc578181815181106110e8576110e8614c5c565b6020026020010151606783838151811061110457611104614c5c565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111809190810190614f41565b60405161118d9190614bd6565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556111c581614c88565b90506110cd565b50604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b6020820152905160679161120091614bd6565b90815260405190819003602001902054606980546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b8152506067816040516112639190614bd6565b90815260405190819003602001902054336001600160a01b039091161461129c5760405162461bcd60e51b815260040161073190614bf2565b60006112c53385602001518660600151876040015188608001518960a001518a60e00151611581565b6000818152606c602052604090208054919250906112f3578054600181018255600082815260208120909101555b60c085015160009060ff1661137857610120860151604080518454602081810283018401845282018181526113719493879284929184919084018282801561135a57602002820191906000526020600020905b815481526020019060010190808311611346575b5050505050815250506115f090919063ffffffff16565b90506113ea565b610120860151604080518454602081810283018401845282018181526113e7949387928492918491908401828280156113d057602002820191906000526020600020905b8154815260200190600101908083116113bc575b50505050508152505061168590919063ffffffff16565b90505b806114225760c086015160ff166114115761012086015161140c908390611aff565b611422565b610120860151611422908390611baf565b935050505b50919050565b60606000338585856040516020016114489493929190614c29565b6040516020818303038152906040528051906020012090506000606b6000838152602001908152602001600020805461148090614b5e565b80601f01602080910402602001604051908101604052809291908181526020018280546114ac90614b5e565b80156114f95780601f106114ce576101008083540402835291602001916114f9565b820191906000526020600020905b8154815290600101906020018083116114dc57829003601f168201915b509396505050505050505b9392505050565b61151361178e565b6001600160a01b0381166115785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610731565b610b7c816117e8565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b6000611679836000015160008151811061160c5761160c614c5c565b6020026020010151600184600060086116259190614f89565b611630906004614f89565b61163b906008614f89565b611646906004614f89565b611651906010614f89565b61165c906018614f89565b611667906020614f89565b6116719190614f89565b60ff16611c27565b60011490505b92915050565b600061167983600001516000815181106116a1576116a1614c5c565b6020026020010151600184600060086116ba9190614f89565b6116c5906004614f89565b6116d0906008614f89565b6116db906004614f89565b6116e6906010614f89565b6116f1906018614f89565b61165c906020614f89565b6060600061150461170c84611c46565b611c6c565b60008061172061170c85611c46565b905061044661174a828560ff168151811061173d5761173d614c5c565b6020026020010151611c6c565b60028151811061175c5761175c614c5c565b6020026020010151611924565b600083821b818361177d600180881b614fae565b901b19969096161795945050505050565b6033546001600160a01b03163314610a6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610731565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166118615760405162461bcd60e51b815260040161073190614fc5565b610a6c611d75565b606554611879576301312d006065555b5a606555565b611427613372565b606061167f8230611da5565b600061167f8260a001516010600060086118ad9190615010565b611c27565b600061167f8260a001516010600060086118cc9190615010565b6118ad906010615010565b6118df613398565b611901836118ee846001614f89565b60ff168151811061173d5761173d614c5c565b60028151811061191357611913614c5c565b602002602001015190509392505050565b80516000901580159061193957508151602110155b61194257600080fd5b60008061194e84611e58565b8151919350915060208210156104465760208290036101000a9004949350505050565b611979613372565b6119aa6040518060400160405280601281526020017102d2d2d20416c6c6f63617465202d2d2d20360741b81525050565b60006119b68584611e9f565b905060006119c4868361227c565b905060005b81518161ffff161015611af45760006119e06127a7565b9050828261ffff16815181106119f8576119f8614c5c565b602090810291909101015160ff1660408201526060880151611a19906127ee565b60ff168152600160208201528351849061ffff8416908110611a3d57611a3d614c5c565b60200260200101518160c0018181525050611a5b8860600151612813565b63ffffffff1660a0820152604080516020810190915260608152611a7f818361284e565b6000611ab1338b60600151602001518c6060015161010001518d602001518e6060015160c001518f600001518a611581565b6000818152606c602090815260409091208451805193945085939192611adc928492909101906133b2565b5090505050505080611aed90615028565b90506119c9565b509395945050505050565b611b8982600001600081548110611b1857611b18614c5c565b90600052602060002001546001808460006008611b359190614f89565b611b40906004614f89565b611b4b906008614f89565b611b56906004614f89565b611b61906010614f89565b611b6c906018614f89565b611b77906020614f89565b611b819190614f89565b60ff16611769565b82600001600081548110611b9f57611b9f614c5c565b6000918252602090912001555050565b611b8982600001600081548110611bc857611bc8614c5c565b90600052602060002001546001808460006008611be59190614f89565b611bf0906004614f89565b611bfb906008614f89565b611c06906004614f89565b611c11906010614f89565b611c1c906018614f89565b611b6c906020614f89565b91821c91600080611c3b600180861b614fae565b909416949350505050565b611c4e613398565b50604080518082019091528151815260209182019181019190915290565b6060611c7782612ddf565b611c8057600080fd5b6000611c8b83612e18565b90506000816001600160401b03811115611ca757611ca761348a565b604051908082528060200260200182016040528015611ce057816020015b611ccd613398565b815260200190600190039081611cc55790505b5090506000611cf28560200151612e9b565b8560200151611d019190615010565b90506000805b84811015611d6a57611d1883612f16565b9150604051806040016040528083815260200184815250848281518110611d4157611d41614c5c565b6020908102919091010152611d568284615010565b925080611d6281614c88565b915050611d07565b509195945050505050565b600054610100900460ff16611d9c5760405162461bcd60e51b815260040161073190614fc5565b610a6c336117e8565b60606000611dba61170c856101600151611c46565b905060005b8151811015611e4d576000611e01611de284848151811061173d5761173d614c5c565b600081518110611df457611df4614c5c565b6020026020010151612fba565b9050846001600160a01b0316816001600160a01b03161415611e3c57611e3283838151811061173d5761173d614c5c565b935050505061167f565b50611e4681614c88565b9050611dbf565b506060949350505050565b6000806000611e6a8460200151612e9b565b90506000818560200151611e7e9190615010565b90506000828660000151611e929190614fae565b9196919550909350505050565b60606000611eb08460600151612fd4565b60ff166001600160401b03811115611eca57611eca61348a565b604051908082528060200260200182016040528015611ef3578160200160208202803683370190505b50905060005b611f068560600151612fd4565b60ff16811015612274576001828281518110611f2457611f24614c5c565b602090810291909101015260ff84166064141561205d5760008560600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7e57600080fd5b505afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614d44565b606087015161010081015190611fcb90611893565b611fd889606001516118b2565b604051602001611feb9493929190614ca3565b60408051601f1981840301815291815281516020928301206000818152606a909352908220549092506001600160801b03169061202a82600883611c27565b905060ff81166001141561205957600085858151811061204c5761204c614c5c565b6020026020010181815250505b5050505b600082828151811061207157612071614c5c565b60200260200101511115612264576069546000906001600160a01b03166352456227836001600160401b038111156120ab576120ab61348a565b6040519080825280601f01601f1916602001820160405280156120d5576020820181803683370190505b506060890151602081015161010082015190916120f190611893565b6120fe8c606001516118b2565b60208d015160608e015160c001518e516040516001600160e01b031960e08b901b16815261213698979695949392919060040161504a565b602060405180830381600087803b15801561215057600080fd5b505af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218891906150b2565b905060018114156121e75760405162461bcd60e51b8152602060048201526024808201527f616c6c6f636174652072616e646f6d20686173207061737365642032353620626044820152636c6f636b60e01b6064820152608401610731565b60028114156122385760405162461bcd60e51b815260206004820152601f60248201527f616c6c6f636174652072616e646f6d20626c6f636b206e6f74207265616368006044820152606401610731565b612244612710826150cb565b83838151811061225657612256614c5c565b602002602001018181525050505b61226d81614c88565b9050611ef9565b509392505050565b606060008360600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c157600080fd5b505afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f99190614d44565b6001600160a01b03166305cce54f8560600151610100015161231e87606001516118b2565b6040516001600160e01b031960e085901b16815263ffffffff92909216600483015261ffff16602482015260440160006040518083038186803b15801561236457600080fd5b505afa158015612378573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123a091908101906150ed565b905060006123b18560600151612fd4565b60ff166001600160401b038111156123cb576123cb61348a565b6040519080825280602002602001820160405280156123f4578160200160208202803683370190505b50905060006124068660600151612fd4565b60ff166001600160401b038111156124205761242061348a565b604051908082528060200260200182016040528015612449578160200160208202803683370190505b509050600061245b8760600151612fd4565b60ff166001600160401b038111156124755761247561348a565b60405190808252806020026020018201604052801561249e578160200160208202803683370190505b50905060005b845181101561279b5760005b6124bd8960600151612fd4565b60ff1681101561278a5760008960600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561250a57600080fd5b505afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190614d44565b60608b015161010081015190612557906118b2565b89868151811061256957612569614c5c565b60200260200101516040516020016125849493929190614c29565b6040516020818303038152906040528051906020012090506000606b600083815260200190815260200160002080546125bc90614b5e565b80601f01602080910402602001604051908101604052809291908181526020018280546125e890614b5e565b80156126355780601f1061260a57610100808354040283529160200191612635565b820191906000526020600020905b81548152906001019060200180831161261857829003601f168201915b505050505090506000612649826000611711565b90508088858151811061265e5761265e614c5c565b602002602001018181516126729190615186565b61ffff169052508a518b908590811061268d5761268d614c5c565b60200260200101518885815181106126a7576126a7614c5c565b602002602001015161ffff16101580156126db57508584815181106126ce576126ce614c5c565b6020908102919091010151155b15612745578885815181106126f2576126f2614c5c565b602002602001015187858151811061270c5761270c614c5c565b602002602001019060ff16908160ff1681525050600186858151811061273457612734614c5c565b911515602092830291909101909101525b612776604051806040016040528060128152602001711696969020b63637b1b0ba3290169696901b60711b81525050565b5050508061278390614c88565b90506124b0565b5061279481614c88565b90506124a4565b50909695505050505050565b6127af6133ec565b6127b76133ec565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b600061167f8260a001516008600060086128089190615010565b6118cc906010615010565b600061167f8260a0015160206000600861282d9190615010565b612838906010615010565b612843906010615010565b6118cc906008615010565b60c081015160019015612869578061286581614c88565b9150505b8160e0015161271014612884578061288081614c88565b9150505b816101000151612710146128a0578061289c81614c88565b9150505b610140820151511515806128b957506101608201515115155b806128c957506101a08201515115155b1561293b57600082610160015151836101400151511161290e57826101a0015151836101600151511161290257826101a0015151612916565b82610160015151612916565b826101400151515b90506129238160046151ac565b61292d9083615010565b60ff90911661012084015290505b806001600160401b038111156129535761295361348a565b60405190808252806020026020018201604052801561297c578160200160208202803683370190505b508352815161298c90849061300f565b61299a838360200151613067565b6129a88383606001516130a0565b6129b68383604001516130ef565b6129c583836101200151613133565b60008060019050836080015162ffffff16612710146129fa576129ec8585608001516131c4565b6129f7600183615186565b91505b8360a0015163ffffffff1661271014612a2957612a1b858560a0015161322b565b612a26600283615186565b91505b60c084015115612a6f5760c0840151855182612a4481614c88565b935081518110612a5657612a56614c5c565b6020908102919091010152612a6c600483615186565b91505b8360e0015161271014612ab85760e0840151855182612a8d81614c88565b935081518110612a9f57612a9f614c5c565b6020908102919091010152612ab5600883615186565b91505b83610100015161271014612b0357610100840151855182612ad881614c88565b935081518110612aea57612aea614c5c565b6020908102919091010152612b00601083615186565b91505b61012084015160ff1615612dce5760005b84610120015160ff16811015612dbf57600085610140015151118015612b3f57508461014001515181105b15612b96578461014001518181518110612b5b57612b5b614c5c565b602002602001015186600001518380612b7390614c88565b945081518110612b8557612b85614c5c565b602002602001018181525050612bc4565b855160009083612ba581614c88565b945081518110612bb757612bb7614c5c565b6020026020010181815250505b600085610160015151118015612bdf57508461016001515181105b15612c36578461016001518181518110612bfb57612bfb614c5c565b602002602001015186600001518380612c1390614c88565b945081518110612c2557612c25614c5c565b602002602001018181525050612c64565b855160009083612c4581614c88565b945081518110612c5757612c57614c5c565b6020026020010181815250505b600085610180015151118015612c7f57508461018001515181105b15612cd9578461018001518181518110612c9b57612c9b614c5c565b602002602001015160ff1686600001518380612cb690614c88565b945081518110612cc857612cc8614c5c565b602002602001018181525050612d06565b8551819083612ce781614c88565b945081518110612cf957612cf9614c5c565b6020026020010181815250505b6000856101a0015151118015612d215750846101a001515181105b15612d8157846101a001518181518110612d3d57612d3d614c5c565b60200260200101516001600160a01b031686600001518380612d5e90614c88565b945081518110612d7057612d70614c5c565b602002602001018181525050612daf565b855160009083612d9081614c88565b945081518110612da257612da2614c5c565b6020026020010181815250505b612db881614c88565b9050612b14565b50612dcb602083615186565b91505b612dd8858361329e565b5050505050565b8051600090612df057506000919050565b6020820151805160001a9060c0821015612e0e575060009392505050565b5060019392505050565b8051600090612e2957506000919050565b600080612e398460200151612e9b565b8460200151612e489190615010565b9050600084600001518560200151612e609190615010565b90505b80821015612e9257612e7482612f16565b612e7e9083615010565b915082612e8a81614c88565b935050612e63565b50909392505050565b8051600090811a6080811015612eb45750600092915050565b60b8811080612ecf575060c08110801590612ecf575060f881105b15612edd5750600192915050565b60c0811015612f0a57612ef2600160b86151cb565b612eff9060ff1682614fae565b611504906001615010565b612ef2600160f86151cb565b80516000908190811a6080811015612f31576001915061086b565b60b8811015612f5757612f45608082614fae565b612f50906001615010565b915061086b565b60c0811015612f845760b78103600185019450806020036101000a8551046001820181019350505061086b565b60f8811015612f9857612f4560c082614fae565b60019390930151602084900360f7016101000a900490920160f5190192915050565b8051600090601514612fcb57600080fd5b61167f82611924565b600061167f8260a00151601060006008612fee9190615010565b612ff9906010615010565b613004906010615010565b6118ad906008615010565b613044826000015160008151811061302957613029614c5c565b60200260200101518260ff16600860ff16600060ff16611769565b8251805160009061305757613057614c5c565b6020026020010181815250505050565b613044826000015160008151811061308157613081614c5c565b60200260200101518260ff16600460ff1660006008611b819190614f89565b61304482600001516000815181106130ba576130ba614c5c565b60200260200101518260ff16600460ff16600060086130d99190614f89565b6130e4906004614f89565b611b81906008614f89565b613044826000015160008151811061310957613109614c5c565b60200260200101518260ff16600860ff16600060086131289190614f89565b611b81906004614f89565b613044826000015160008151811061314d5761314d614c5c565b60200260200101518260ff16600860ff166000600861316c9190614f89565b613177906004614f89565b613182906008614f89565b61318d906004614f89565b613198906010614f89565b6131a3906018614f89565b6131ae906020614f89565b6131b9906020614f89565b611b81906020614f89565b61304482600001516000815181106131de576131de614c5c565b60200260200101518262ffffff16601860ff16600060086131ff9190614f89565b61320a906004614f89565b613215906008614f89565b613220906004614f89565b611b81906010614f89565b613044826000015160008151811061324557613245614c5c565b60200260200101518263ffffffff16602060ff16600060086132679190614f89565b613272906004614f89565b61327d906008614f89565b613288906004614f89565b613293906010614f89565b611b81906018614f89565b61304482600001516000815181106132b8576132b8614c5c565b60200260200101518261ffff16601060ff16600060086132d89190614f89565b6132e3906004614f89565b613128906008614f89565b8280546132fa90614b5e565b90600052602060002090601f01602090048101928261331c5760008555613362565b82601f1061333557805160ff1916838001178555613362565b82800160010185558215613362579182015b82811115613362578251825591602001919060010190613347565b5061336e929150613475565b5090565b604080516080810182526000808252602082015260609181018290528181019190915290565b604051806040016040528060008152602001600081525090565b8280548282559060005260206000209081019282156133625791602002820182811115613362578251825591602001919060010190613347565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b8082111561336e5760008155600101613476565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b03811182821017156134c3576134c361348a565b60405290565b60405160a081016001600160401b03811182821017156134c3576134c361348a565b604080519081016001600160401b03811182821017156134c3576134c361348a565b604051608081016001600160401b03811182821017156134c3576134c361348a565b60405161018081016001600160401b03811182821017156134c3576134c361348a565b604051606081016001600160401b03811182821017156134c3576134c361348a565b60405161016081016001600160401b03811182821017156134c3576134c361348a565b604051601f8201601f191681016001600160401b03811182821017156135bf576135bf61348a565b604052919050565b6001600160a01b0381168114610b7c57600080fd5b80356135e7816135c7565b919050565b803563ffffffff811681146135e757600080fd5b60ff81168114610b7c57600080fd5b80356135e781613600565b803561ffff811681146135e757600080fd5b6000610140828403121561363f57600080fd5b6136476134a0565b613650836135dc565b815261365e602084016135dc565b602082015261366f604084016135dc565b6040820152613680606084016135ec565b6060820152613691608084016135ec565b60808201526136a260a084016135dc565b60a08201526136b360c0840161360f565b60c08201526136c460e0840161361a565b60e08201526101006136d781850161360f565b908201526101206136e984820161360f565b908201529392505050565b60006001600160401b0382111561370d5761370d61348a565b50601f01601f191660200190565b600082601f83011261372c57600080fd5b813561373f61373a826136f4565b613597565b81815284602083860101111561375457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561378e57600080fd5b8835613799816135c7565b975060208901356137a9816135c7565b965060408901356137b9816135c7565b95506137c760608a016135ec565b945060808901356137d7816135c7565b93506137e560a08a016135ec565b925060c08901356001600160401b0381111561380057600080fd5b61380c8b828c0161371b565b92505061381b60e08a0161361a565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b8083101561386f578351825292840192600192909201919084019061384f565b509695505050505050565b60005b8381101561389557818101518382015260200161387d565b838111156138a4576000848401525b50505050565b600081518084526138c281602086016020860161387a565b601f01601f19169290920160200192915050565b60208152600061150460208301846138aa565b6000602082840312156138fb57600080fd5b5035919050565b60008060008060008060c0878903121561391b57600080fd5b8635613926816135c7565b95506020870135613936816135c7565b9450613944604088016135ec565b93506060870135613954816135c7565b9250613962608088016135ec565b915061397060a0880161361a565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b8181101561279b5783516001600160a01b0316835292840192918401916001016139a5565b600080600080608085870312156139e057600080fd5b6139e9856135ec565b93506139f76020860161361a565b92506040850135613a0781613600565b915060608501356001600160401b03811115613a2257600080fd5b613a2e8782880161371b565b91505092959194509250565b60006001600160401b03821115613a5357613a5361348a565b5060051b60200190565b60006020808385031215613a7057600080fd5b82356001600160401b0380821115613a8757600080fd5b818501915085601f830112613a9b57600080fd5b8135613aa961373a82613a3a565b81815260059190911b83018401908481019088831115613ac857600080fd5b8585015b83811015613b0057803585811115613ae45760008081fd5b613af28b89838a010161371b565b845250918601918601613acc565b5098975050505050505050565b600080600080600060a08688031215613b2557600080fd5b613b2e866135ec565b9450613b3c6020870161361a565b9350613b4a6040870161361a565b92506060860135613b5a81613600565b915060808601356001600160401b03811115613b7557600080fd5b613b818882890161371b565b9150509295509295909350565b600082601f830112613b9f57600080fd5b81356020613baf61373a83613a3a565b82815260059290921b84018101918181019086841115613bce57600080fd5b8286015b8481101561386f5780356001600160401b0380821115613bf157600080fd5b9088019060a0828b03601f19011215613c0957600080fd5b613c116134c9565b86830135613c1e81613600565b8152604083810135613c2f816135c7565b828901526060848101358284015260808501359083015260a084013583811115613c595760008081fd5b8085019450508b603f850112613c7157600092508283fd5b878401359250613c8361373a84613a3a565b83815260069390931b8401810192888101908d851115613ca35760008081fd5b948201945b84861015613cfa5782868f031215613cc05760008081fd5b613cc86134eb565b613cd1876135ec565b81528a8701358060040b8114613ce75760008081fd5b818c015282529482019490890190613ca8565b6080840152505085525050918301918301613bd2565b600060808284031215613d2257600080fd5b613d2a61350d565b90508135613d37816135c7565b81526020820135613d4781613600565b602082015260408201356001600160401b0380821115613d6657600080fd5b613d728583860161371b565b60408401526060840135915080821115613d8b57600080fd5b50613d988482850161371b565b60608301525092915050565b60008060408385031215613db757600080fd5b82356001600160401b0380821115613dce57600080fd5b9084019060a08287031215613de257600080fd5b613dea6134c9565b8235613df5816135c7565b81526020830135613e05816135c7565b60208201526040830135613e18816135c7565b6040820152606083013582811115613e2f57600080fd5b83016101808189031215613e4257600080fd5b613e4a61352f565b613e53826135dc565b8152613e61602083016135dc565b6020820152613e72604083016135dc565b6040820152613e83606083016135dc565b60608201526080820135608082015260a082013560a0820152613ea860c083016135ec565b60c0820152613eb960e083016135ec565b60e0820152610100613ecc8184016135ec565b90820152610120613ede83820161360f565b908201526101408281013585811115613ef657600080fd5b613f028b828601613b8e565b8284015250506101608083013585811115613f1c57600080fd5b613f288b82860161371b565b8284015250508060608401525050613f426080840161360f565b608082015293506020850135915080821115613f5d57600080fd5b50613f6a85828601613d10565b9150509250929050565b6020815260018060a01b03825116602082015260ff60208301511660408201526000604083015160806060840152613faf60a08401826138aa565b90506060840151601f19848303016080850152613fcc82826138aa565b95945050505050565b600082601f830112613fe657600080fd5b81356020613ff661373a83613a3a565b82815260059290921b8401810191818101908684111561401557600080fd5b8286015b8481101561386f5780358352918301918301614019565b600082601f83011261404157600080fd5b8135602061405161373a83613a3a565b82815260059290921b8401810191818101908684111561407057600080fd5b8286015b8481101561386f578035614087816135c7565b8352918301918301614074565b600082601f8301126140a557600080fd5b813560206140b561373a83613a3a565b82815260059290921b840181019181810190868411156140d457600080fd5b8286015b8481101561386f5780356001600160401b03808211156140f757600080fd5b90880190601f196080838c038201121561411057600080fd5b61411861350d565b878401358381111561412957600080fd5b84016060818e038401121561413d57600080fd5b614145613552565b92508881013561415481613600565b8352604081810135614165816135c7565b848b015260608201358581111561417b57600080fd5b6141898f8c83860101613fd5565b828601525083835261419c81870161360f565b8a84015260608601359350848411156141b457600080fd5b6141c28e8b86890101614030565b908301525060808401359150828211156141db57600080fd5b6141e98c8984870101613fd5565b606082015286525050509183019183016140d8565b600082601f83011261420f57600080fd5b8135602061421f61373a83613a3a565b82815260059290921b8401810191818101908684111561423e57600080fd5b8286015b8481101561386f5780356001600160401b038111156142615760008081fd5b61426f8986838b010161371b565b845250918301918301614242565b600082601f83011261428e57600080fd5b8135602061429e61373a83613a3a565b82815260059290921b840181019181810190868411156142bd57600080fd5b8286015b8481101561386f5780356001600160401b03808211156142e15760008081fd5b9088019060a0828b03601f19018113156142fb5760008081fd5b6143036134c9565b87840135838111156143155760008081fd5b6143238d8a83880101614094565b825250604061433381860161360f565b8983015260606143448187016135dc565b8284015260809150818601358581111561435e5760008081fd5b61436c8f8c838a0101614030565b828501525050828501359250838311156143865760008081fd5b6143948d8a858801016141fe565b9082015286525050509183019183016142c1565b600082601f8301126143b957600080fd5b813560206143c961373a83613a3a565b82815260059290921b840181019181810190868411156143e857600080fd5b8286015b8481101561386f5780356143ff81613600565b83529183019183016143ec565b80356001600160401b03811681146135e757600080fd5b600082601f83011261443457600080fd5b8135602061444461373a83613a3a565b82815260059290921b8401810191818101908684111561446357600080fd5b8286015b8481101561386f5780356001600160401b03808211156144875760008081fd5b90880190610160828b03601f19018113156144a25760008081fd5b6144aa613574565b6144b588850161361a565b815260406144c481860161361a565b8983015260606144d581870161360f565b82840152608091506144e88287016135ec565b9083015260a06144f986820161360f565b8284015260c0915061450c8287016135ec565b9083015260e061451d8682016135ec565b82840152610100915061453182870161440c565b90830152610120858101358581111561454a5760008081fd5b6145588f8c838a0101614030565b8385015250610140915081860135858111156145745760008081fd5b6145828f8c838a01016141fe565b8285015250506145938386016135dc565b908201528652505050918301918301614467565b600082601f8301126145b857600080fd5b813560206145c861373a83613a3a565b82815260059290921b840181019181810190868411156145e757600080fd5b8286015b8481101561386f5780356001600160401b038082111561460b5760008081fd5b9088019060a0828b03601f19018113156146255760008081fd5b61462d6134c9565b6146388885016135ec565b81526040808501358481111561464e5760008081fd5b61465c8e8b8389010161371b565b8a84015250606080860135858111156146755760008081fd5b6146838f8c838a010161371b565b838501525060809150818601358581111561469e5760008081fd5b6146ac8f8c838a010161371b565b8285015250506146bd83860161360f565b9082015286525050509183019183016145eb565b600080604083850312156146e457600080fd5b6146ed836135ec565b915060208301356001600160401b038082111561470957600080fd5b90840190610160828703121561471e57600080fd5b614726613574565b82358281111561473557600080fd5b6147418882860161427d565b82525060208301358281111561475657600080fd5b614762888286016143a8565b60208301525060408301358281111561477a57600080fd5b61478688828601614423565b60408301525060608301358281111561479e57600080fd5b6147aa888286016145a7565b6060830152506080830135828111156147c257600080fd5b6147ce888286016143a8565b60808301525060a0830135828111156147e657600080fd5b6147f288828601614030565b60a08301525060c08301358281111561480a57600080fd5b61481688828601614030565b60c08301525061482860e084016135ec565b60e082015261010061483b8185016135ec565b9082015261012061484d84820161360f565b90820152610140838101358381111561486557600080fd5b6148718982870161371b565b8284015250508093505050509250929050565b60006020828403121561489657600080fd5b81356001600160401b03808211156148ad57600080fd5b9083019061016082860312156148c257600080fd5b6148ca613574565b6148d3836135dc565b81526148e1602084016135dc565b60208201526148f2604084016135ec565b60408201526149036060840161361a565b60608201526149146080840161361a565b608082015261492560a0840161360f565b60a082015261493660c084016135dc565b60c082015261494760e084016135ec565b60e082015261010061495a8185016135dc565b9082015261012061496c84820161360f565b90820152610140838101358381111561498457600080fd5b6149908882870161371b565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156149f657603f198886030184526149e48583516138aa565b945092850192908501906001016149c8565b5092979650505050505050565b600060208284031215614a1557600080fd5b81356001600160401b03811115614a2b57600080fd5b61044684828501614030565b600080600060608486031215614a4c57600080fd5b614a55846135ec565b9250614a636020850161361a565b91506040840135614a7381613600565b809150509250925092565b600060208284031215614a9057600080fd5b8135611504816135c7565b600081518084526020808501945080840160005b83811015614ace57815160ff1687529582019590820190600101614aaf565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614b5057888303603f1901855281518051878552614b2488860182614a9b565b91890151858303868b0152919050614b3c8183614a9b565b968901969450505090860190600101614b00565b509098975050505050505050565b600181811c90821680614b7257607f821691505b6020821081141561142757634e487b7160e01b600052602260045260246000fd5b6001600160a01b039687168152948616602086015263ffffffff93841660408601529190941660608401529216608082015261ffff90911660a082015260c00190565b60008251614be881846020870161387a565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614c9c57614c9c614c72565b5060010190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b03978816815263ffffffff968716602082015261ffff9586166040820152939094166060840152908516608083015290921660a083015290911660c082015260e00190565b600060208284031215614d3457600080fd5b8151801515811461150457600080fd5b600060208284031215614d5657600080fd5b8151611504816135c7565b60408152614d7360408201845161397c565b60006020840151614d87606084018261397c565b50604084015163ffffffff8116608084015250606084015161ffff811660a084015250608084015161ffff811660c08401525060a084015160ff811660e08401525060c0840151610100614ddd8185018361397c565b60e08601519150610120614df88186018463ffffffff169052565b90860151915061014090614e0e8583018461397c565b8601519150610160614e248582018460ff169052565b818701519250806101808601525050614e416101a08401826138aa565b91505061150460208301846001600160801b03169052565b6000614e6761373a846136f4565b9050828152838383011115614e7b57600080fd5b61150483602083018461387a565b60006020808385031215614e9c57600080fd5b82516001600160401b0380821115614eb357600080fd5b818501915085601f830112614ec757600080fd5b8151614ed561373a82613a3a565b81815260059190911b83018401908481019088831115614ef457600080fd5b8585015b83811015613b0057805185811115614f105760008081fd5b8601603f81018b13614f225760008081fd5b614f338b8983015160408401614e59565b845250918601918601614ef8565b600060208284031215614f5357600080fd5b81516001600160401b03811115614f6957600080fd5b8201601f81018413614f7a57600080fd5b61044684825160208401614e59565b600060ff821660ff84168060ff03821115614fa657614fa6614c72565b019392505050565b600082821015614fc057614fc0614c72565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000821982111561502357615023614c72565b500190565b600061ffff8083168181141561504057615040614c72565b6001019392505050565b600061010080835261505e8184018c6138aa565b6001600160a01b039a8b16602085015263ffffffff998a16604085015261ffff98891660608501529690971660808301525092871660a0840152941660c08201529290931660e09092019190915250919050565b6000602082840312156150c457600080fd5b5051919050565b6000826150e857634e487b7160e01b600052601260045260246000fd5b500690565b6000602080838503121561510057600080fd5b82516001600160401b0381111561511657600080fd5b8301601f8101851361512757600080fd5b805161513561373a82613a3a565b81815260059190911b8201830190838101908783111561515457600080fd5b928401925b8284101561517b57835161516c81613600565b82529284019290840190615159565b979650505050505050565b600061ffff8083168185168083038211156151a3576151a3614c72565b01949350505050565b60008160001904831182151516156151c6576151c6614c72565b500290565b600060ff821660ff8416808210156151e5576151e5614c72565b9003939250505056fea2646970667358221220b6af97d7ef21df5b08b291fd5c0621c3e97480671d8d101a610c7a118166325864736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012d5760003560e01c80638129fc1c116100b35780638129fc1c1461023f5780638da5cb5b1461024757806395edcb081461026c578063a903620c1461028c578063af84b51f1461029f578063b41bd789146102bf578063b4b70352146102d2578063d0d35b55146102e5578063dcbad90d146102f8578063f2fde38b1461030b578063f2fe4fa51461031e578063f96f58271461032d57600080fd5b80631cc4f041146101325780631eda6e4f1461015a57806334c76b251461017a578063394a7398146101a75780634b2dbcb8146101ba5780634b2e9b41146101da57806354fd4d50146101ed5780635790c294146101fc57806362329cc5146102115780636dabaf0414610224578063715018a614610237575b600080fd5b61014561014036600461362c565b61036e565b60405190151581526020015b60405180910390f35b61016d610168366004613771565b61044e565b604051610151919061382a565b604080518082019091526008815267416c6c6f6361746560c01b60208201525b60405161015191906138d6565b61019a6101b53660046138e9565b6104e4565b6101cd6101c8366004613902565b61057e565b6040516101519190613989565b6101cd6101e8366004613902565b610620565b60405160018152602001610151565b61020f61020a3660046139ca565b6106c0565b005b6101cd61021f366004613a5d565b610795565b610145610232366004613b0d565b610872565b61020f610a5a565b61020f610a6e565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610151565b61027f61027a366004613da4565b610b7f565b6040516101519190613f74565b61020f61029a3660046146d1565b610eef565b6102b26102ad366004614884565b610f6c565b60405161015191906149a1565b61020f6102cd366004614a03565b6110c2565b6101456102e036600461362c565b611232565b61019a6102f3366004614a37565b61142d565b606954610254906001600160a01b031681565b61020f610319366004614a7e565b61150b565b60606040516101519190614ad9565b61035661033b3660046138e9565b606a602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610151565b60008061039c836000015184602001518560600151866040015187608001518860a001518960e00151611581565b6000818152606c60209081526040808320815181548085028201840184529381018481529596509394909284928491908401828280156103fb57602002820191906000526020600020905b8154815260200190600101908083116103e7575b505050505081525050905060008060ff168560c0015160ff1614156104325761012085015161042b9083906115f0565b9050610446565b610120850151610443908390611685565b90505b949350505050565b604080516020810190915260608152600061046e8a898989898e89611581565b6000818152606c602090815260409182902082518154808402820185018552928101838152949550939092849284918401828280156104cc57602002820191906000526020600020905b8154815260200190600101908083116104b8575b50505050508152505091505098975050505050505050565b606b60205260009081526040902080546104fd90614b5e565b80601f016020809104026020016040519081016040528092919081815260200182805461052990614b5e565b80156105765780601f1061054b57610100808354040283529160200191610576565b820191906000526020600020905b81548152906001019060200180831161055957829003601f168201915b505050505081565b6060600087878787878760405160200161059d96959493929190614b93565b60408051601f1981840301815282825280516020918201206000818152606e8352839020805480840286018401909452838552909450919083018282801561060e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105f0575b50505050509150509695505050505050565b6060600087878787878760405160200161063f96959493929190614b93565b60408051601f1981840301815282825280516020918201206000818152606d8352839020805480840286018401909452838552909450919083018282801561060e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105f05750505050509150509695505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506067816040516106f89190614bd6565b90815260405190819003602001902054336001600160a01b039091161461073a5760405162461bcd60e51b815260040161073190614bf2565b60405180910390fd5b6000338686866040516020016107539493929190614c29565b60408051601f1981840301815291815281516020928301206000818152606b845291909120855191935061078c929091908601906132ee565b50505050505050565b6060600082516001600160401b038111156107b2576107b261348a565b6040519080825280602002602001820160405280156107db578160200160208202803683370190505b50905060005b815181101561086b5760678482815181106107fe576107fe614c5c565b60200260200101516040516108139190614bd6565b9081526040519081900360200190205482516001600160a01b039091169083908390811061084357610843614c5c565b6001600160a01b039092166020928302919091019091015261086481614c88565b90506107e1565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506067816040516108b39190614bd6565b90815260405190819003602001902054336001600160a01b03909116146108ec5760405162461bcd60e51b815260040161073190614bf2565b60ff841615806108ff575060ff84166001145b15610a4d57600061090f846116fc565b9050600061091e856000611711565b905060006003905060018351111561093e5761093b866001611711565b90505b6069546040516331048c1760e11b815263ffffffff8c16600482015261ffff808c1660248301528a16604482015260ff831660648201526001600160a01b0390911690636209182e90608401600060405180830381600087803b1580156109a457600080fd5b505af11580156109b8573d6000803e3d6000fd5b505050506000338b8b8b6040516020016109d59493929190614ca3565b60408051601f1981840301815291815281516020928301206000818152606a909352908220549092506001600160801b031690610a1b90829060ff871690600890611769565b6000928352606a602052604090922080546001600160801b0319166001600160801b0390931692909217909155505050505b5060019695505050505050565b610a6261178e565b610a6c60006117e8565b565b600054610100900460ff1615808015610a8e5750600054600160ff909116105b80610aa85750303b158015610aa8575060005460ff166001145b610b0b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610731565b6000805460ff191660011790558015610b2e576000805461ff0019166101001790555b610b3661183a565b8015610b7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610b87613372565b60405180604001604052806006815260200165456e67696e6560d01b815250606781604051610bb69190614bd6565b90815260405190819003602001902054336001600160a01b0390911614610bef5760405162461bcd60e51b815260040161073190614bf2565b610bf7611869565b308352608084015160ff16610c1757610c10848461187f565b9250610ee7565b608084015160ff1660011415610ee7576000610c368560600151611887565b9050805160001480610c49575080516001145b15610d6d57606954606086015160208101516101008201516001600160a01b039093169263063738cb92610c7c90611893565b610c898a606001516118b2565b60208b015160608c015160c001518c516040516001600160e01b031960e08a901b168152610cc09796959493929190600401614cd6565b602060405180830381600087803b158015610cda57600080fd5b505af1158015610cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d129190614d22565b15610d2357600a6020850152610d64565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918601526001908501525b8392505061086b565b6060850151600090610d8990610d849084846118d7565b611924565b905060ff8116600a1415610eb757606954606087015160208101516101008201516001600160a01b039093169263063738cb92610dc590611893565b610dd28b606001516118b2565b60208c015160608d015160c001518d516040516001600160e01b031960e08a901b168152610e099796959493929190600401614cd6565b602060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b9190614d22565b15610e6c57600a6020860152610ead565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918701526001908601525b849350505061086b565b60ff81161580610eca575060ff81166064145b15610ee457610eda868683611971565b6064602082015294505b50505b509092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606781604051610f2e9190614bd6565b90815260405190819003602001902054336001600160a01b0390911614610f675760405162461bcd60e51b815260040161073190614bf2565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015610fad57600080fd5b505afa158015610fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe59190614d44565b604080850151606086015160808701519251611005949390602001614ca3565b60408051601f1981840301815282825280516020918201206000818152606a90925291902054637c84493760e11b83529092506001600160801b03169073__$2c2f449ee1414632ca928a7ef80a41533f$__9063f908926e9061106e9087908590600401614d61565b60006040518083038186803b15801561108657600080fd5b505af415801561109a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104469190810190614e89565b6110ca61178e565b60005b81518110156111cc578181815181106110e8576110e8614c5c565b6020026020010151606783838151811061110457611104614c5c565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111809190810190614f41565b60405161118d9190614bd6565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556111c581614c88565b90506110cd565b50604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b6020820152905160679161120091614bd6565b90815260405190819003602001902054606980546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b8152506067816040516112639190614bd6565b90815260405190819003602001902054336001600160a01b039091161461129c5760405162461bcd60e51b815260040161073190614bf2565b60006112c53385602001518660600151876040015188608001518960a001518a60e00151611581565b6000818152606c602052604090208054919250906112f3578054600181018255600082815260208120909101555b60c085015160009060ff1661137857610120860151604080518454602081810283018401845282018181526113719493879284929184919084018282801561135a57602002820191906000526020600020905b815481526020019060010190808311611346575b5050505050815250506115f090919063ffffffff16565b90506113ea565b610120860151604080518454602081810283018401845282018181526113e7949387928492918491908401828280156113d057602002820191906000526020600020905b8154815260200190600101908083116113bc575b50505050508152505061168590919063ffffffff16565b90505b806114225760c086015160ff166114115761012086015161140c908390611aff565b611422565b610120860151611422908390611baf565b935050505b50919050565b60606000338585856040516020016114489493929190614c29565b6040516020818303038152906040528051906020012090506000606b6000838152602001908152602001600020805461148090614b5e565b80601f01602080910402602001604051908101604052809291908181526020018280546114ac90614b5e565b80156114f95780601f106114ce576101008083540402835291602001916114f9565b820191906000526020600020905b8154815290600101906020018083116114dc57829003601f168201915b509396505050505050505b9392505050565b61151361178e565b6001600160a01b0381166115785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610731565b610b7c816117e8565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b6000611679836000015160008151811061160c5761160c614c5c565b6020026020010151600184600060086116259190614f89565b611630906004614f89565b61163b906008614f89565b611646906004614f89565b611651906010614f89565b61165c906018614f89565b611667906020614f89565b6116719190614f89565b60ff16611c27565b60011490505b92915050565b600061167983600001516000815181106116a1576116a1614c5c565b6020026020010151600184600060086116ba9190614f89565b6116c5906004614f89565b6116d0906008614f89565b6116db906004614f89565b6116e6906010614f89565b6116f1906018614f89565b61165c906020614f89565b6060600061150461170c84611c46565b611c6c565b60008061172061170c85611c46565b905061044661174a828560ff168151811061173d5761173d614c5c565b6020026020010151611c6c565b60028151811061175c5761175c614c5c565b6020026020010151611924565b600083821b818361177d600180881b614fae565b901b19969096161795945050505050565b6033546001600160a01b03163314610a6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610731565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166118615760405162461bcd60e51b815260040161073190614fc5565b610a6c611d75565b606554611879576301312d006065555b5a606555565b611427613372565b606061167f8230611da5565b600061167f8260a001516010600060086118ad9190615010565b611c27565b600061167f8260a001516010600060086118cc9190615010565b6118ad906010615010565b6118df613398565b611901836118ee846001614f89565b60ff168151811061173d5761173d614c5c565b60028151811061191357611913614c5c565b602002602001015190509392505050565b80516000901580159061193957508151602110155b61194257600080fd5b60008061194e84611e58565b8151919350915060208210156104465760208290036101000a9004949350505050565b611979613372565b6119aa6040518060400160405280601281526020017102d2d2d20416c6c6f63617465202d2d2d20360741b81525050565b60006119b68584611e9f565b905060006119c4868361227c565b905060005b81518161ffff161015611af45760006119e06127a7565b9050828261ffff16815181106119f8576119f8614c5c565b602090810291909101015160ff1660408201526060880151611a19906127ee565b60ff168152600160208201528351849061ffff8416908110611a3d57611a3d614c5c565b60200260200101518160c0018181525050611a5b8860600151612813565b63ffffffff1660a0820152604080516020810190915260608152611a7f818361284e565b6000611ab1338b60600151602001518c6060015161010001518d602001518e6060015160c001518f600001518a611581565b6000818152606c602090815260409091208451805193945085939192611adc928492909101906133b2565b5090505050505080611aed90615028565b90506119c9565b509395945050505050565b611b8982600001600081548110611b1857611b18614c5c565b90600052602060002001546001808460006008611b359190614f89565b611b40906004614f89565b611b4b906008614f89565b611b56906004614f89565b611b61906010614f89565b611b6c906018614f89565b611b77906020614f89565b611b819190614f89565b60ff16611769565b82600001600081548110611b9f57611b9f614c5c565b6000918252602090912001555050565b611b8982600001600081548110611bc857611bc8614c5c565b90600052602060002001546001808460006008611be59190614f89565b611bf0906004614f89565b611bfb906008614f89565b611c06906004614f89565b611c11906010614f89565b611c1c906018614f89565b611b6c906020614f89565b91821c91600080611c3b600180861b614fae565b909416949350505050565b611c4e613398565b50604080518082019091528151815260209182019181019190915290565b6060611c7782612ddf565b611c8057600080fd5b6000611c8b83612e18565b90506000816001600160401b03811115611ca757611ca761348a565b604051908082528060200260200182016040528015611ce057816020015b611ccd613398565b815260200190600190039081611cc55790505b5090506000611cf28560200151612e9b565b8560200151611d019190615010565b90506000805b84811015611d6a57611d1883612f16565b9150604051806040016040528083815260200184815250848281518110611d4157611d41614c5c565b6020908102919091010152611d568284615010565b925080611d6281614c88565b915050611d07565b509195945050505050565b600054610100900460ff16611d9c5760405162461bcd60e51b815260040161073190614fc5565b610a6c336117e8565b60606000611dba61170c856101600151611c46565b905060005b8151811015611e4d576000611e01611de284848151811061173d5761173d614c5c565b600081518110611df457611df4614c5c565b6020026020010151612fba565b9050846001600160a01b0316816001600160a01b03161415611e3c57611e3283838151811061173d5761173d614c5c565b935050505061167f565b50611e4681614c88565b9050611dbf565b506060949350505050565b6000806000611e6a8460200151612e9b565b90506000818560200151611e7e9190615010565b90506000828660000151611e929190614fae565b9196919550909350505050565b60606000611eb08460600151612fd4565b60ff166001600160401b03811115611eca57611eca61348a565b604051908082528060200260200182016040528015611ef3578160200160208202803683370190505b50905060005b611f068560600151612fd4565b60ff16811015612274576001828281518110611f2457611f24614c5c565b602090810291909101015260ff84166064141561205d5760008560600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7e57600080fd5b505afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614d44565b606087015161010081015190611fcb90611893565b611fd889606001516118b2565b604051602001611feb9493929190614ca3565b60408051601f1981840301815291815281516020928301206000818152606a909352908220549092506001600160801b03169061202a82600883611c27565b905060ff81166001141561205957600085858151811061204c5761204c614c5c565b6020026020010181815250505b5050505b600082828151811061207157612071614c5c565b60200260200101511115612264576069546000906001600160a01b03166352456227836001600160401b038111156120ab576120ab61348a565b6040519080825280601f01601f1916602001820160405280156120d5576020820181803683370190505b506060890151602081015161010082015190916120f190611893565b6120fe8c606001516118b2565b60208d015160608e015160c001518e516040516001600160e01b031960e08b901b16815261213698979695949392919060040161504a565b602060405180830381600087803b15801561215057600080fd5b505af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218891906150b2565b905060018114156121e75760405162461bcd60e51b8152602060048201526024808201527f616c6c6f636174652072616e646f6d20686173207061737365642032353620626044820152636c6f636b60e01b6064820152608401610731565b60028114156122385760405162461bcd60e51b815260206004820152601f60248201527f616c6c6f636174652072616e646f6d20626c6f636b206e6f74207265616368006044820152606401610731565b612244612710826150cb565b83838151811061225657612256614c5c565b602002602001018181525050505b61226d81614c88565b9050611ef9565b509392505050565b606060008360600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c157600080fd5b505afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f99190614d44565b6001600160a01b03166305cce54f8560600151610100015161231e87606001516118b2565b6040516001600160e01b031960e085901b16815263ffffffff92909216600483015261ffff16602482015260440160006040518083038186803b15801561236457600080fd5b505afa158015612378573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123a091908101906150ed565b905060006123b18560600151612fd4565b60ff166001600160401b038111156123cb576123cb61348a565b6040519080825280602002602001820160405280156123f4578160200160208202803683370190505b50905060006124068660600151612fd4565b60ff166001600160401b038111156124205761242061348a565b604051908082528060200260200182016040528015612449578160200160208202803683370190505b509050600061245b8760600151612fd4565b60ff166001600160401b038111156124755761247561348a565b60405190808252806020026020018201604052801561249e578160200160208202803683370190505b50905060005b845181101561279b5760005b6124bd8960600151612fd4565b60ff1681101561278a5760008960600151602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561250a57600080fd5b505afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190614d44565b60608b015161010081015190612557906118b2565b89868151811061256957612569614c5c565b60200260200101516040516020016125849493929190614c29565b6040516020818303038152906040528051906020012090506000606b600083815260200190815260200160002080546125bc90614b5e565b80601f01602080910402602001604051908101604052809291908181526020018280546125e890614b5e565b80156126355780601f1061260a57610100808354040283529160200191612635565b820191906000526020600020905b81548152906001019060200180831161261857829003601f168201915b505050505090506000612649826000611711565b90508088858151811061265e5761265e614c5c565b602002602001018181516126729190615186565b61ffff169052508a518b908590811061268d5761268d614c5c565b60200260200101518885815181106126a7576126a7614c5c565b602002602001015161ffff16101580156126db57508584815181106126ce576126ce614c5c565b6020908102919091010151155b15612745578885815181106126f2576126f2614c5c565b602002602001015187858151811061270c5761270c614c5c565b602002602001019060ff16908160ff1681525050600186858151811061273457612734614c5c565b911515602092830291909101909101525b612776604051806040016040528060128152602001711696969020b63637b1b0ba3290169696901b60711b81525050565b5050508061278390614c88565b90506124b0565b5061279481614c88565b90506124a4565b50909695505050505050565b6127af6133ec565b6127b76133ec565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b600061167f8260a001516008600060086128089190615010565b6118cc906010615010565b600061167f8260a0015160206000600861282d9190615010565b612838906010615010565b612843906010615010565b6118cc906008615010565b60c081015160019015612869578061286581614c88565b9150505b8160e0015161271014612884578061288081614c88565b9150505b816101000151612710146128a0578061289c81614c88565b9150505b610140820151511515806128b957506101608201515115155b806128c957506101a08201515115155b1561293b57600082610160015151836101400151511161290e57826101a0015151836101600151511161290257826101a0015151612916565b82610160015151612916565b826101400151515b90506129238160046151ac565b61292d9083615010565b60ff90911661012084015290505b806001600160401b038111156129535761295361348a565b60405190808252806020026020018201604052801561297c578160200160208202803683370190505b508352815161298c90849061300f565b61299a838360200151613067565b6129a88383606001516130a0565b6129b68383604001516130ef565b6129c583836101200151613133565b60008060019050836080015162ffffff16612710146129fa576129ec8585608001516131c4565b6129f7600183615186565b91505b8360a0015163ffffffff1661271014612a2957612a1b858560a0015161322b565b612a26600283615186565b91505b60c084015115612a6f5760c0840151855182612a4481614c88565b935081518110612a5657612a56614c5c565b6020908102919091010152612a6c600483615186565b91505b8360e0015161271014612ab85760e0840151855182612a8d81614c88565b935081518110612a9f57612a9f614c5c565b6020908102919091010152612ab5600883615186565b91505b83610100015161271014612b0357610100840151855182612ad881614c88565b935081518110612aea57612aea614c5c565b6020908102919091010152612b00601083615186565b91505b61012084015160ff1615612dce5760005b84610120015160ff16811015612dbf57600085610140015151118015612b3f57508461014001515181105b15612b96578461014001518181518110612b5b57612b5b614c5c565b602002602001015186600001518380612b7390614c88565b945081518110612b8557612b85614c5c565b602002602001018181525050612bc4565b855160009083612ba581614c88565b945081518110612bb757612bb7614c5c565b6020026020010181815250505b600085610160015151118015612bdf57508461016001515181105b15612c36578461016001518181518110612bfb57612bfb614c5c565b602002602001015186600001518380612c1390614c88565b945081518110612c2557612c25614c5c565b602002602001018181525050612c64565b855160009083612c4581614c88565b945081518110612c5757612c57614c5c565b6020026020010181815250505b600085610180015151118015612c7f57508461018001515181105b15612cd9578461018001518181518110612c9b57612c9b614c5c565b602002602001015160ff1686600001518380612cb690614c88565b945081518110612cc857612cc8614c5c565b602002602001018181525050612d06565b8551819083612ce781614c88565b945081518110612cf957612cf9614c5c565b6020026020010181815250505b6000856101a0015151118015612d215750846101a001515181105b15612d8157846101a001518181518110612d3d57612d3d614c5c565b60200260200101516001600160a01b031686600001518380612d5e90614c88565b945081518110612d7057612d70614c5c565b602002602001018181525050612daf565b855160009083612d9081614c88565b945081518110612da257612da2614c5c565b6020026020010181815250505b612db881614c88565b9050612b14565b50612dcb602083615186565b91505b612dd8858361329e565b5050505050565b8051600090612df057506000919050565b6020820151805160001a9060c0821015612e0e575060009392505050565b5060019392505050565b8051600090612e2957506000919050565b600080612e398460200151612e9b565b8460200151612e489190615010565b9050600084600001518560200151612e609190615010565b90505b80821015612e9257612e7482612f16565b612e7e9083615010565b915082612e8a81614c88565b935050612e63565b50909392505050565b8051600090811a6080811015612eb45750600092915050565b60b8811080612ecf575060c08110801590612ecf575060f881105b15612edd5750600192915050565b60c0811015612f0a57612ef2600160b86151cb565b612eff9060ff1682614fae565b611504906001615010565b612ef2600160f86151cb565b80516000908190811a6080811015612f31576001915061086b565b60b8811015612f5757612f45608082614fae565b612f50906001615010565b915061086b565b60c0811015612f845760b78103600185019450806020036101000a8551046001820181019350505061086b565b60f8811015612f9857612f4560c082614fae565b60019390930151602084900360f7016101000a900490920160f5190192915050565b8051600090601514612fcb57600080fd5b61167f82611924565b600061167f8260a00151601060006008612fee9190615010565b612ff9906010615010565b613004906010615010565b6118ad906008615010565b613044826000015160008151811061302957613029614c5c565b60200260200101518260ff16600860ff16600060ff16611769565b8251805160009061305757613057614c5c565b6020026020010181815250505050565b613044826000015160008151811061308157613081614c5c565b60200260200101518260ff16600460ff1660006008611b819190614f89565b61304482600001516000815181106130ba576130ba614c5c565b60200260200101518260ff16600460ff16600060086130d99190614f89565b6130e4906004614f89565b611b81906008614f89565b613044826000015160008151811061310957613109614c5c565b60200260200101518260ff16600860ff16600060086131289190614f89565b611b81906004614f89565b613044826000015160008151811061314d5761314d614c5c565b60200260200101518260ff16600860ff166000600861316c9190614f89565b613177906004614f89565b613182906008614f89565b61318d906004614f89565b613198906010614f89565b6131a3906018614f89565b6131ae906020614f89565b6131b9906020614f89565b611b81906020614f89565b61304482600001516000815181106131de576131de614c5c565b60200260200101518262ffffff16601860ff16600060086131ff9190614f89565b61320a906004614f89565b613215906008614f89565b613220906004614f89565b611b81906010614f89565b613044826000015160008151811061324557613245614c5c565b60200260200101518263ffffffff16602060ff16600060086132679190614f89565b613272906004614f89565b61327d906008614f89565b613288906004614f89565b613293906010614f89565b611b81906018614f89565b61304482600001516000815181106132b8576132b8614c5c565b60200260200101518261ffff16601060ff16600060086132d89190614f89565b6132e3906004614f89565b613128906008614f89565b8280546132fa90614b5e565b90600052602060002090601f01602090048101928261331c5760008555613362565b82601f1061333557805160ff1916838001178555613362565b82800160010185558215613362579182015b82811115613362578251825591602001919060010190613347565b5061336e929150613475565b5090565b604080516080810182526000808252602082015260609181018290528181019190915290565b604051806040016040528060008152602001600081525090565b8280548282559060005260206000209081019282156133625791602002820182811115613362578251825591602001919060010190613347565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b8082111561336e5760008155600101613476565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b03811182821017156134c3576134c361348a565b60405290565b60405160a081016001600160401b03811182821017156134c3576134c361348a565b604080519081016001600160401b03811182821017156134c3576134c361348a565b604051608081016001600160401b03811182821017156134c3576134c361348a565b60405161018081016001600160401b03811182821017156134c3576134c361348a565b604051606081016001600160401b03811182821017156134c3576134c361348a565b60405161016081016001600160401b03811182821017156134c3576134c361348a565b604051601f8201601f191681016001600160401b03811182821017156135bf576135bf61348a565b604052919050565b6001600160a01b0381168114610b7c57600080fd5b80356135e7816135c7565b919050565b803563ffffffff811681146135e757600080fd5b60ff81168114610b7c57600080fd5b80356135e781613600565b803561ffff811681146135e757600080fd5b6000610140828403121561363f57600080fd5b6136476134a0565b613650836135dc565b815261365e602084016135dc565b602082015261366f604084016135dc565b6040820152613680606084016135ec565b6060820152613691608084016135ec565b60808201526136a260a084016135dc565b60a08201526136b360c0840161360f565b60c08201526136c460e0840161361a565b60e08201526101006136d781850161360f565b908201526101206136e984820161360f565b908201529392505050565b60006001600160401b0382111561370d5761370d61348a565b50601f01601f191660200190565b600082601f83011261372c57600080fd5b813561373f61373a826136f4565b613597565b81815284602083860101111561375457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561378e57600080fd5b8835613799816135c7565b975060208901356137a9816135c7565b965060408901356137b9816135c7565b95506137c760608a016135ec565b945060808901356137d7816135c7565b93506137e560a08a016135ec565b925060c08901356001600160401b0381111561380057600080fd5b61380c8b828c0161371b565b92505061381b60e08a0161361a565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b8083101561386f578351825292840192600192909201919084019061384f565b509695505050505050565b60005b8381101561389557818101518382015260200161387d565b838111156138a4576000848401525b50505050565b600081518084526138c281602086016020860161387a565b601f01601f19169290920160200192915050565b60208152600061150460208301846138aa565b6000602082840312156138fb57600080fd5b5035919050565b60008060008060008060c0878903121561391b57600080fd5b8635613926816135c7565b95506020870135613936816135c7565b9450613944604088016135ec565b93506060870135613954816135c7565b9250613962608088016135ec565b915061397060a0880161361a565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b8181101561279b5783516001600160a01b0316835292840192918401916001016139a5565b600080600080608085870312156139e057600080fd5b6139e9856135ec565b93506139f76020860161361a565b92506040850135613a0781613600565b915060608501356001600160401b03811115613a2257600080fd5b613a2e8782880161371b565b91505092959194509250565b60006001600160401b03821115613a5357613a5361348a565b5060051b60200190565b60006020808385031215613a7057600080fd5b82356001600160401b0380821115613a8757600080fd5b818501915085601f830112613a9b57600080fd5b8135613aa961373a82613a3a565b81815260059190911b83018401908481019088831115613ac857600080fd5b8585015b83811015613b0057803585811115613ae45760008081fd5b613af28b89838a010161371b565b845250918601918601613acc565b5098975050505050505050565b600080600080600060a08688031215613b2557600080fd5b613b2e866135ec565b9450613b3c6020870161361a565b9350613b4a6040870161361a565b92506060860135613b5a81613600565b915060808601356001600160401b03811115613b7557600080fd5b613b818882890161371b565b9150509295509295909350565b600082601f830112613b9f57600080fd5b81356020613baf61373a83613a3a565b82815260059290921b84018101918181019086841115613bce57600080fd5b8286015b8481101561386f5780356001600160401b0380821115613bf157600080fd5b9088019060a0828b03601f19011215613c0957600080fd5b613c116134c9565b86830135613c1e81613600565b8152604083810135613c2f816135c7565b828901526060848101358284015260808501359083015260a084013583811115613c595760008081fd5b8085019450508b603f850112613c7157600092508283fd5b878401359250613c8361373a84613a3a565b83815260069390931b8401810192888101908d851115613ca35760008081fd5b948201945b84861015613cfa5782868f031215613cc05760008081fd5b613cc86134eb565b613cd1876135ec565b81528a8701358060040b8114613ce75760008081fd5b818c015282529482019490890190613ca8565b6080840152505085525050918301918301613bd2565b600060808284031215613d2257600080fd5b613d2a61350d565b90508135613d37816135c7565b81526020820135613d4781613600565b602082015260408201356001600160401b0380821115613d6657600080fd5b613d728583860161371b565b60408401526060840135915080821115613d8b57600080fd5b50613d988482850161371b565b60608301525092915050565b60008060408385031215613db757600080fd5b82356001600160401b0380821115613dce57600080fd5b9084019060a08287031215613de257600080fd5b613dea6134c9565b8235613df5816135c7565b81526020830135613e05816135c7565b60208201526040830135613e18816135c7565b6040820152606083013582811115613e2f57600080fd5b83016101808189031215613e4257600080fd5b613e4a61352f565b613e53826135dc565b8152613e61602083016135dc565b6020820152613e72604083016135dc565b6040820152613e83606083016135dc565b60608201526080820135608082015260a082013560a0820152613ea860c083016135ec565b60c0820152613eb960e083016135ec565b60e0820152610100613ecc8184016135ec565b90820152610120613ede83820161360f565b908201526101408281013585811115613ef657600080fd5b613f028b828601613b8e565b8284015250506101608083013585811115613f1c57600080fd5b613f288b82860161371b565b8284015250508060608401525050613f426080840161360f565b608082015293506020850135915080821115613f5d57600080fd5b50613f6a85828601613d10565b9150509250929050565b6020815260018060a01b03825116602082015260ff60208301511660408201526000604083015160806060840152613faf60a08401826138aa565b90506060840151601f19848303016080850152613fcc82826138aa565b95945050505050565b600082601f830112613fe657600080fd5b81356020613ff661373a83613a3a565b82815260059290921b8401810191818101908684111561401557600080fd5b8286015b8481101561386f5780358352918301918301614019565b600082601f83011261404157600080fd5b8135602061405161373a83613a3a565b82815260059290921b8401810191818101908684111561407057600080fd5b8286015b8481101561386f578035614087816135c7565b8352918301918301614074565b600082601f8301126140a557600080fd5b813560206140b561373a83613a3a565b82815260059290921b840181019181810190868411156140d457600080fd5b8286015b8481101561386f5780356001600160401b03808211156140f757600080fd5b90880190601f196080838c038201121561411057600080fd5b61411861350d565b878401358381111561412957600080fd5b84016060818e038401121561413d57600080fd5b614145613552565b92508881013561415481613600565b8352604081810135614165816135c7565b848b015260608201358581111561417b57600080fd5b6141898f8c83860101613fd5565b828601525083835261419c81870161360f565b8a84015260608601359350848411156141b457600080fd5b6141c28e8b86890101614030565b908301525060808401359150828211156141db57600080fd5b6141e98c8984870101613fd5565b606082015286525050509183019183016140d8565b600082601f83011261420f57600080fd5b8135602061421f61373a83613a3a565b82815260059290921b8401810191818101908684111561423e57600080fd5b8286015b8481101561386f5780356001600160401b038111156142615760008081fd5b61426f8986838b010161371b565b845250918301918301614242565b600082601f83011261428e57600080fd5b8135602061429e61373a83613a3a565b82815260059290921b840181019181810190868411156142bd57600080fd5b8286015b8481101561386f5780356001600160401b03808211156142e15760008081fd5b9088019060a0828b03601f19018113156142fb5760008081fd5b6143036134c9565b87840135838111156143155760008081fd5b6143238d8a83880101614094565b825250604061433381860161360f565b8983015260606143448187016135dc565b8284015260809150818601358581111561435e5760008081fd5b61436c8f8c838a0101614030565b828501525050828501359250838311156143865760008081fd5b6143948d8a858801016141fe565b9082015286525050509183019183016142c1565b600082601f8301126143b957600080fd5b813560206143c961373a83613a3a565b82815260059290921b840181019181810190868411156143e857600080fd5b8286015b8481101561386f5780356143ff81613600565b83529183019183016143ec565b80356001600160401b03811681146135e757600080fd5b600082601f83011261443457600080fd5b8135602061444461373a83613a3a565b82815260059290921b8401810191818101908684111561446357600080fd5b8286015b8481101561386f5780356001600160401b03808211156144875760008081fd5b90880190610160828b03601f19018113156144a25760008081fd5b6144aa613574565b6144b588850161361a565b815260406144c481860161361a565b8983015260606144d581870161360f565b82840152608091506144e88287016135ec565b9083015260a06144f986820161360f565b8284015260c0915061450c8287016135ec565b9083015260e061451d8682016135ec565b82840152610100915061453182870161440c565b90830152610120858101358581111561454a5760008081fd5b6145588f8c838a0101614030565b8385015250610140915081860135858111156145745760008081fd5b6145828f8c838a01016141fe565b8285015250506145938386016135dc565b908201528652505050918301918301614467565b600082601f8301126145b857600080fd5b813560206145c861373a83613a3a565b82815260059290921b840181019181810190868411156145e757600080fd5b8286015b8481101561386f5780356001600160401b038082111561460b5760008081fd5b9088019060a0828b03601f19018113156146255760008081fd5b61462d6134c9565b6146388885016135ec565b81526040808501358481111561464e5760008081fd5b61465c8e8b8389010161371b565b8a84015250606080860135858111156146755760008081fd5b6146838f8c838a010161371b565b838501525060809150818601358581111561469e5760008081fd5b6146ac8f8c838a010161371b565b8285015250506146bd83860161360f565b9082015286525050509183019183016145eb565b600080604083850312156146e457600080fd5b6146ed836135ec565b915060208301356001600160401b038082111561470957600080fd5b90840190610160828703121561471e57600080fd5b614726613574565b82358281111561473557600080fd5b6147418882860161427d565b82525060208301358281111561475657600080fd5b614762888286016143a8565b60208301525060408301358281111561477a57600080fd5b61478688828601614423565b60408301525060608301358281111561479e57600080fd5b6147aa888286016145a7565b6060830152506080830135828111156147c257600080fd5b6147ce888286016143a8565b60808301525060a0830135828111156147e657600080fd5b6147f288828601614030565b60a08301525060c08301358281111561480a57600080fd5b61481688828601614030565b60c08301525061482860e084016135ec565b60e082015261010061483b8185016135ec565b9082015261012061484d84820161360f565b90820152610140838101358381111561486557600080fd5b6148718982870161371b565b8284015250508093505050509250929050565b60006020828403121561489657600080fd5b81356001600160401b03808211156148ad57600080fd5b9083019061016082860312156148c257600080fd5b6148ca613574565b6148d3836135dc565b81526148e1602084016135dc565b60208201526148f2604084016135ec565b60408201526149036060840161361a565b60608201526149146080840161361a565b608082015261492560a0840161360f565b60a082015261493660c084016135dc565b60c082015261494760e084016135ec565b60e082015261010061495a8185016135dc565b9082015261012061496c84820161360f565b90820152610140838101358381111561498457600080fd5b6149908882870161371b565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156149f657603f198886030184526149e48583516138aa565b945092850192908501906001016149c8565b5092979650505050505050565b600060208284031215614a1557600080fd5b81356001600160401b03811115614a2b57600080fd5b61044684828501614030565b600080600060608486031215614a4c57600080fd5b614a55846135ec565b9250614a636020850161361a565b91506040840135614a7381613600565b809150509250925092565b600060208284031215614a9057600080fd5b8135611504816135c7565b600081518084526020808501945080840160005b83811015614ace57815160ff1687529582019590820190600101614aaf565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614b5057888303603f1901855281518051878552614b2488860182614a9b565b91890151858303868b0152919050614b3c8183614a9b565b968901969450505090860190600101614b00565b509098975050505050505050565b600181811c90821680614b7257607f821691505b6020821081141561142757634e487b7160e01b600052602260045260246000fd5b6001600160a01b039687168152948616602086015263ffffffff93841660408601529190941660608401529216608082015261ffff90911660a082015260c00190565b60008251614be881846020870161387a565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614c9c57614c9c614c72565b5060010190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b03978816815263ffffffff968716602082015261ffff9586166040820152939094166060840152908516608083015290921660a083015290911660c082015260e00190565b600060208284031215614d3457600080fd5b8151801515811461150457600080fd5b600060208284031215614d5657600080fd5b8151611504816135c7565b60408152614d7360408201845161397c565b60006020840151614d87606084018261397c565b50604084015163ffffffff8116608084015250606084015161ffff811660a084015250608084015161ffff811660c08401525060a084015160ff811660e08401525060c0840151610100614ddd8185018361397c565b60e08601519150610120614df88186018463ffffffff169052565b90860151915061014090614e0e8583018461397c565b8601519150610160614e248582018460ff169052565b818701519250806101808601525050614e416101a08401826138aa565b91505061150460208301846001600160801b03169052565b6000614e6761373a846136f4565b9050828152838383011115614e7b57600080fd5b61150483602083018461387a565b60006020808385031215614e9c57600080fd5b82516001600160401b0380821115614eb357600080fd5b818501915085601f830112614ec757600080fd5b8151614ed561373a82613a3a565b81815260059190911b83018401908481019088831115614ef457600080fd5b8585015b83811015613b0057805185811115614f105760008081fd5b8601603f81018b13614f225760008081fd5b614f338b8983015160408401614e59565b845250918601918601614ef8565b600060208284031215614f5357600080fd5b81516001600160401b03811115614f6957600080fd5b8201601f81018413614f7a57600080fd5b61044684825160208401614e59565b600060ff821660ff84168060ff03821115614fa657614fa6614c72565b019392505050565b600082821015614fc057614fc0614c72565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000821982111561502357615023614c72565b500190565b600061ffff8083168181141561504057615040614c72565b6001019392505050565b600061010080835261505e8184018c6138aa565b6001600160a01b039a8b16602085015263ffffffff998a16604085015261ffff98891660608501529690971660808301525092871660a0840152941660c08201529290931660e09092019190915250919050565b6000602082840312156150c457600080fd5b5051919050565b6000826150e857634e487b7160e01b600052601260045260246000fd5b500690565b6000602080838503121561510057600080fd5b82516001600160401b0381111561511657600080fd5b8301601f8101851361512757600080fd5b805161513561373a82613a3a565b81815260059190911b8201830190838101908783111561515457600080fd5b928401925b8284101561517b57835161516c81613600565b82529284019290840190615159565b979650505050505050565b600061ffff8083168185168083038211156151a3576151a3614c72565b01949350505050565b60008160001904831182151516156151c6576151c6614c72565b500290565b600060ff821660ff8416808210156151e5576151e5614c72565b9003939250505056fea2646970667358221220b6af97d7ef21df5b08b291fd5c0621c3e97480671d8d101a610c7a118166325864736f6c63430008080033",
  "linkReferences": {
    "contracts/V3/handler/AllocateHandlerLib.sol": {
      "AllocateHandlerLib": [
        {
          "length": 20,
          "start": 4196
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/V3/handler/AllocateHandlerLib.sol": {
      "AllocateHandlerLib": [
        {
          "length": 20,
          "start": 4164
        }
      ]
    }
  }
}
