{
  "_format": "hh-sol-artifact-1",
  "contractName": "Engine",
  "sourceName": "contracts/V3/Engine.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "taskState",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "ioBranch",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "EventTask",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16[]",
          "name": "roundList",
          "type": "uint16[]"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "uint16[]",
          "name": "roundList",
          "type": "uint16[]"
        }
      ],
      "name": "claimAddress",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16[]",
          "name": "roundList",
          "type": "uint16[]"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16[]",
          "name": "roundList",
          "type": "uint16[]"
        }
      ],
      "name": "executeClaim",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolTokenInput",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolTokenInput_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "poolFee_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "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": "groupInputBranch",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "multiple",
          "type": "uint32"
        },
        {
          "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"
        }
      ],
      "name": "input",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "_paused",
          "type": "bool"
        }
      ],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        }
      ],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        }
      ],
      "name": "revoke",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolTokenInput_",
          "type": "address"
        }
      ],
      "name": "setPoolTokenInput",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50614a8e806100206000396000f3fe6080604052600436106100e25760003560e01c8063715018a611610085578063715018a6146102325780638da5cb5b1461024757806392db469614610265578063a0ee79bf14610278578063c80ac5f31461028b578063f081de0c146102a9578063f2fde38b146102c9578063f4933fea146102e9578063fe3ee169146102fc57600080fd5b80632b81042e1461012657806330f975231461013b57806334c76b251461014e5780633d7678741461018c578063485cc9551461019f57806354fd4d50146101bf5780635ac86ab7146101db5780636741fad21461020b57600080fd5b3661012157604080513381523460208201527fd6717f327e0cb88b4a97a7f67a453e9258252c34937ccbdd86de7cb840e7def3910160405180910390a1005b600080fd5b61013961013436600461347c565b61031c565b005b6101396101493660046135c8565b610618565b34801561015a57600080fd5b506040805180820182526006815265456e67696e6560d01b6020820152905161018391906136c1565b60405180910390f35b61013961019a3660046136d4565b61070c565b3480156101ab57600080fd5b506101396101ba36600461370d565b6109b6565b3480156101cb57600080fd5b5060405160018152602001610183565b3480156101e757600080fd5b506101fb6101f636600461373b565b610b09565b6040519015158152602001610183565b34801561021757600080fd5b506099546001600160a01b03165b6040516101839190613758565b34801561023e57600080fd5b50610139610b21565b34801561025357600080fd5b506033546001600160a01b0316610225565b61013961027336600461376c565b610b35565b61013961028636600461376c565b610e6d565b34801561029757600080fd5b506098546001600160a01b0316610225565b3480156102b557600080fd5b506101396102c43660046137f4565b610eb4565b3480156102d557600080fd5b506101396102e43660046137f4565b610ede565b6101396102f736600461376c565b610f57565b34801561030857600080fd5b5061013961031736600461381f565b61104e565b600161032781610b09565b1561034d5760405162461bcd60e51b81526004016103449061384d565b60405180910390fd5b610355611072565b604051633ae08c6560e01b815263ffffffff8b1660048201526001906001600160a01b038d1690633ae08c659060240160206040518083038186803b15801561039d57600080fd5b505afa1580156103b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d5919061388a565b60ff16146104255760405162461bcd60e51b815260206004820152601c60248201527f696e70757420636c7573746572206973206e6f7420656e61626c6564000000006044820152606401610344565b60008b6001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046057600080fd5b505afa158015610474573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049891906138b2565b6001600160a01b031663e53d7f7d8c8c8c6040518463ffffffff1660e01b81526004016104c7939291906138cf565b60206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610517919061388a565b905060ff81166001148061052e575060ff8116600b145b6105845760405162461bcd60e51b815260206004820152602160248201527f696e70757420636c75737465722072756c65206973206e6f7420656e61626c656044820152601960fa1b6064820152608401610344565b60408051610160810182523381526098546001600160a01b0390811660208301528e811692820192909252888216606082015263ffffffff808e16608083015261ffff808e1660a08401528c1660c083015260ff8b1660e083015287166101008201526101208101869052610140810185905260995490916106099183911689611088565b50505050505050505050505050565b600361062381610b09565b156106405760405162461bcd60e51b81526004016103449061384d565b604051636c51371d60e11b815263ffffffff861660048201526000906001600160a01b0388169063d8a26e3a9060240160006040518083038186803b15801561068857600080fd5b505afa15801561069c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c49190810190613bd8565b61012081015190915060ff16600a146106ef5760405162461bcd60e51b815260040161034490613c0c565b6101608101859052610703878286866111eb565b50505050505050565b600561071781610b09565b156107345760405162461bcd60e51b81526004016103449061384d565b604051636c51371d60e11b815263ffffffff831660048201526000906001600160a01b0385169063d8a26e3a9060240160006040518083038186803b15801561077c57600080fd5b505afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190613bd8565b61012081015190915060ff166001146108075760405162461bcd60e51b81526020600482015260116024820152701d185cdac81b5d5cdd081a5b8812539255607a1b6044820152606401610344565b80516001600160a01b031633146108305760405162461bcd60e51b815260040161034490613c37565b609854604051630483823d60e31b815273__$1d93808c49adb5062914c75723341b8fb1$__9163241c11e8916108769185916001600160a01b0390911690600401613e26565b60006040518083038186803b15801561088e57600080fd5b505af41580156108a2573d6000803e3d6000fd5b5050505060408181015190516306a264dd60e41b81526001600160a01b03861691636a264dd0916108da918791601490600401613e50565b600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050505080610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528360200151878560c001516014600061094989611431565b604080516001600160a01b03978816815295909616602086015263ffffffff939093168486015260ff918216606085015261ffff1660808401521660a082015260e060c0820181905260029082015261060f60f31b6101008201529051908190036101200190a350505050565b600054610100900460ff16158080156109d65750600054600160ff909116105b806109f05750303b1580156109f0575060005460ff166001145b610a535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610344565b6000805460ff191660011790558015610a76576000805461ff0019166101001790555b610a7e61146c565b610a86611493565b610a8e61146c565b609880546001600160a01b038086166001600160a01b03199283161790925560998054928516929091169190911790558015610b04576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60ff9081166000908152606560205260409020541690565b610b296114c3565b610b33600061151d565b565b6002610b4081610b09565b15610b5d5760405162461bcd60e51b81526004016103449061384d565b60005a604051636c51371d60e11b815263ffffffff871660048201529091506000906001600160a01b0388169063d8a26e3a9060240160006040518083038186803b158015610bab57600080fd5b505afa158015610bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610be79190810190613bd8565b80519091506001600160a01b03163314610c135760405162461bcd60e51b815260040161034490613c37565b61012081015160ff16600114801590610c35575061012081015160ff16600514155b15610ca55760405162461bcd60e51b815260206004820152603a60248201527f7461736b2065786563757465206d75737420696e205441534b5f53544154455f60448201527912539415550b151054d2d7d4d510551157d41493d0d154d4d15160321b6064820152608401610344565b61016081018590526000610cb88261156f565b60ff161415610d3857610cca81611582565b63ffffffff16421015610d146040518060600160405280602d8152602001614a2c602d9139610cf84261159c565b610d0f610d0486611582565b63ffffffff1661159c565b6115a7565b90610d325760405162461bcd60e51b815260040161034491906136c1565b50610da2565b610d41816115d6565b63ffffffff16610d4f61161c565b1015610d826040518060600160405280602c8152602001614a00602c9139610d764361159c565b610d0f610d04866115d6565b90610da05760405162461bcd60e51b815260040161034491906136c1565b505b610dad8782866116a8565b60005a610dba9084613e90565b60995460405163a80bf44360e01b815230600482015260016024820152604481018390529192506000916001600160a01b039091169063a80bf4439034906064016020604051808303818588803b158015610e1457600080fd5b505af1158015610e28573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e4d9190613ea7565b9050610e6233610e5d8334613e90565b61219f565b505050505050505050565b6004610e7881610b09565b15610e955760405162461bcd60e51b81526004016103449061384d565b610ea185858585610b35565b610ead85858585610f57565b5050505050565b610ebc6114c3565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610ee66114c3565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610344565b610f548161151d565b50565b6003610f6281610b09565b15610f7f5760405162461bcd60e51b81526004016103449061384d565b604051636c51371d60e11b815263ffffffff851660048201526000906001600160a01b0387169063d8a26e3a9060240160006040518083038186803b158015610fc757600080fd5b505afa158015610fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110039190810190613bd8565b61012081015190915060ff16600a1461102e5760405162461bcd60e51b815260040161034490613c0c565b610160810184905280516110469087908390866111eb565b505050505050565b6110566114c3565b801561106957611065826122b5565b5050565b6110658261234a565b609754611082576301312d006097555b5a609755565b600080600073__$ee3bf710910d501adf17576e3f6132303f$__63ad61cd2187878960600151886040518563ffffffff1660e01b81526004016110ce9493929190613ec0565b60006040518083038186803b1580156110e657600080fd5b505af41580156110fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111229190810190614056565b92509250925061113586868585856123e2565b600063ffffffff85161561114b5750600261114f565b5060015b83610100015163ffffffff16336001600160a01b03166000805160206149e083398151915286602001518a606001518860c001518660008e60e001518f61014001516040516111a497969594939291906140cc565b60405180910390a360608701516040805160008152602081019091526111cc919086906116a8565b6107036040518060600160405280602781526020016149b96027913950565b8051611296576111fa83612438565b60ff166001600160401b038111156112145761121461312c565b60405190808252806020026020018201604052801561123d578160200160208202803683370190505b50905060005b61124c84612438565b60ff168161ffff1610156112945780828261ffff16815181106112715761127161412c565b61ffff9092166020928302919091019091015261128d81614142565b9050611243565b505b60c083015160e084015163ffffffff16156112b2575060e08301515b60005b82518161ffff161015611302576000838261ffff16815181106112da576112da61412c565b602002602001015190506112f18787878487612473565b506112fb81614142565b90506112b5565b506040805160a0810182523381526001600160a01b0387811660208084019190915260995482168385015260608084018990526001608080860191909152855190810186528986015190931683526002838301528451808301865260008082528487019190915285518181529283019095529293928201908152509050600086602001516001600160a01b031663dceacb0e8861010001516113a38a6126f9565b6113ac8b612713565b6040518463ffffffff1660e01b81526004016113ca939291906138cf565b600060405180830381600087803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261142091908101906141c8565b9050610e628382600001518461272d565b60006114668260a0015160086000600861144b91906141fc565b6114569060106141fc565b6114619060106141fc565b6129d8565b92915050565b600054610100900460ff16610b335760405162461bcd60e51b815260040161034490614214565b600054610100900460ff166114ba5760405162461bcd60e51b815260040161034490614214565b610b333361151d565b6033546001600160a01b03163314610b335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610344565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006114668260a00151600860006129d8565b6000611466826080015160206000602061146191906141fc565b6060611466826129f7565b60608383836040516020016115be9392919061425f565b60405160208183030381529060405290509392505050565b600061146682608001516020600060206115f091906141fc565b6115fb9060206141fc565b6116069060206141fc565b6116119060206141fc565b6114619060206141fc565b60004661a4b18114156116a15760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561166357600080fd5b505afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190613ea7565b91505090565b4391505090565b60408051602081019091526060815261012083015160ff1660011415611d645760608301516000906001600160a01b0316156117ee576040805160a08101825233815261010086015163ffffffff166020820152600091810161170a87611431565b60ff16815260200161171b87612438565b60ff908116825260c088015163ffffffff9081166020938401526060808a015160408051635b774b6f60e11b815287516001600160a01b0390811660048301529688015185166024820152908701518516604482015291860151909316606482015260808501519091166084820152929350169063b6ee96de9060a401602060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea91906142b9565b9150505b8060030b600014611b7c57604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0808301849052610100830184905261012083019390935261014082018190526101608201529085015163ffffffff16156118f6575060e0840151604051636c51371d60e11b815263ffffffff909116600482015284906001600160a01b0387169063d8a26e3a9060240160006040518083038186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f39190810190613bd8565b94505b60c0850151604051630cd49c6160e21b815263ffffffff9091166004820152600383900b60248201526000906001600160a01b03881690633352718490604401602060405180830381600087803b15801561195057600080fd5b505af1158015611964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198891906142dc565b905060006119958761156f565b60ff1614156119b6576119b18663ffffffff80841690612a9316565b6119c9565b6119c98663ffffffff80841690612abb16565b85602001516001600160a01b031663c7d6bff18761010001516119eb896126f9565b6119f48a612713565b6040518463ffffffff1660e01b8152600401611a12939291906138cf565b600060405180830381600087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a6891908101906141c8565b8051805191955090611a7c90600190613e90565b81518110611a8c57611a8c61412c565b60209081029190910101516001600160a01b03908116604080850191909152609854905163a7c3cfd760e01b815273__$92e364a4eff7a9bc4f199d55197cbc7995$__9263a7c3cfd792611aeb928c9288928c929116906004016142f9565b60006040518083038186803b158015611b0357600080fd5b505af4158015611b17573d6000803e3d6000fd5b5050505081610100015163ffffffff16336001600160a01b03166000805160206149e083398151915284602001518a8660c00151600a6000611b588a611431565b8e6101600151604051611b7197969594939291906140cc565b60405180910390a350505b6000611b878561156f565b60ff161415611bb257611b9984611582565b63ffffffff16421015611bad575050505050565b611bd6565b611bbb846115d6565b63ffffffff16611bc961161c565b1015611bd6575050505050565b600084602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1557600080fd5b505afa158015611c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4d91906138b2565b6001600160a01b031663cb963bba866101000151611c6a886126f9565b611c7389612713565b611c7c8a612438565b6040516001600160e01b031960e087901b16815263ffffffff94909416600485015261ffff92831660248501529116604483015260ff166064820152608401602060405180830381600087803b158015611cd557600080fd5b505af1158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d919061436d565b905080611d615780611d615760405162461bcd60e51b815260206004820181905260248201527f72756c654c656674436f756e74206e6f7420656e6f75676820746f2063616c6c6044820152606401610344565b50505b805151611e0d5782602001516001600160a01b031663c7d6bff1846101000151611d8d866126f9565b611d9687612713565b6040518463ffffffff1660e01b8152600401611db4939291906138cf565b600060405180830381600087803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e0a91908101906141c8565b90505b6040805160a0810182523381526001600160a01b038681166020808401919091526099548216838501526060808401889052600160808086019190915285519081018652888601519093168352600283830152845180830186526000808252848701919091528551908152918201909452928101929092528251909190611e969083908361272d565b602081015190915060ff1660051415611f0f5784610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c0015160016000611ee68d611431565b8d6101600151604051611eff97969594939291906140cc565b60405180910390a3505050505050565b61012085015160ff16600114156120225760c085015181516040516306a264dd60e41b81526001600160a01b03891692636a264dd092611f5492600590600401613e50565b600060405180830381600087803b158015611f6e57600080fd5b505af1158015611f82573d6000803e3d6000fd5b50505050611f994286612afe90919063ffffffff16565b611fab611fa461161c565b8690612b15565b84610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c0015160056000611fe88d611431565b8d610160015160405161200197969594939291906140cc565b60405180910390a3600561012086015280516001600160a01b031660408601525b602081015160ff16600a141561206f5784610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c0015160056000611ee68d611431565b602081015160ff166064148061208c5750602081015160ff1660c8145b156121935760c085015181516040516306a264dd60e41b81526001600160a01b03891692636a264dd0926120c592600a90600401613e50565b600060405180830381600087803b1580156120df57600080fd5b505af11580156120f3573d6000803e3d6000fd5b5050505061210a4286612b3790919063ffffffff16565b61211c61211561161c565b8690612b4e565b84610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c00151600a60006121598d611431565b8d610160015160405161217297969594939291906140cc565b60405180910390a3600a61012086015280516001600160a01b031660408601525b611046868633876111eb565b804710156121ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610344565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461223c576040519150601f19603f3d011682016040523d82523d6000602084013e612241565b606091505b5050905080610b045760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610344565b806122bf81610b09565b156122dc5760405162461bcd60e51b81526004016103449061384d565b60ff82166000908152606560205260409020805460ff191660011790557f0116a706473db0e0938996f608b9894b96b1583d307f8c605ec7fccb6d7a8cdb826123223390565b6040805160ff90931683526001600160a01b0390911660208301520160405180910390a15050565b8061235481610b09565b6123a05760405162461bcd60e51b815260206004820152601c60248201527f5061757361626c653a206e6f7420706175736564206368616e6e656c000000006044820152606401610344565b60ff82166000908152606560205260409020805460ff191690557fe33b1e8c9a3225cc5a849e3f9c6d9c272be7915b24983c2a048dfe7c79390f418233612322565b6040805160a0810182523381526060808801516001600160a01b0390811660208401528716928201929092529081018490526000608082015261242361308b565b61242e82848361272d565b5050505050505050565b60006114668260a0015160106000600861245291906141fc565b61245d9060106141fc565b6124689060106141fc565b6114619060086141fc565b600084604001516001600160a01b0316631eda6e4f308688602001518961010001518b888c61016001518b6040518963ffffffff1660e01b81526004016124c198979695949392919061438a565b60006040518083038186803b1580156124d957600080fd5b505afa1580156124ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261251591908101906143f6565b90506000600161252483612b70565b60ff161490506000600161253784612baf565b60ff16149050856001600160a01b031687600001516001600160a01b031614801561255f5750815b156125ee5773__$92e364a4eff7a9bc4f199d55197cbc7995$__63e170ae4f848a8a8961258b89612bfc565b6098546040516001600160e01b031960e089901b1681526125bd9695949392916001600160a01b0316906004016144f7565b60006040518083038186803b1580156125d557600080fd5b505af41580156125e9573d6000803e3d6000fd5b505050505b60e087015163ffffffff1615806126025750805b156126815773__$92e364a4eff7a9bc4f199d55197cbc7995$__63ae626701848a8a8a8a61262f8a612bfc565b6040518763ffffffff1660e01b815260040161265096959493929190614554565b60006040518083038186803b15801561266857600080fd5b505af415801561267c573d6000803e3d6000fd5b505050505b61012087015160ff16600a141561242e5786610100015163ffffffff16336001600160a01b03166000805160206149e083398151915289602001518b8b60c00151601e8b6126ce8b612bfc565b8f61016001516040516126e797969594939291906140cc565b60405180910390a35050505050505050565b60006114668260a0015160106000600861146191906141fc565b60006114668260a0015160106000600861145691906141fc565b61273561308b565b60005b83518160ff1610156129cf576000846127528360016145ae565b60ff16815181106127655761276561412c565b60200260200101519050600080868460ff16815181106127875761278761412c565b60200260200101516001600160a01b031663c2bc2efc846040518263ffffffff1660e01b81526004016127ba9190613758565b60006040518083038186803b1580156127d257600080fd5b505afa1580156127e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261280e91908101906145d3565b915091508161287757816128576040518060400160405280601581526020017468616e646c6572206e6f7420617661696c61626c6560581b81525061285286612c3e565b612c54565b906128755760405162461bcd60e51b815260040161034491906136c1565b505b60005a90506000846001600160a01b03166395edcb088b8a6040518363ffffffff1660e01b81526004016128ac929190614714565b600060405180830381600087803b1580156128c657600080fd5b505af11580156128da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612902919081019061485c565b90506129198a865a6129149086613e90565b612c80565b602081015160ff16600114156129965760006129766040518060400160405280601f81526020017f68616e646c65722070726f63657373206661696c7572652068616e646c6572008152508360400151610d0f8e60000151612c3e565b906129945760405162461bcd60e51b815260040161034491906136c1565b505b80975060c860ff16816020015160ff1614156129b65750505050506129cf565b50505050508060026129c891906145ae565b9050612738565b50909392505050565b91821c916000806129ec600180861b613e90565b909416949350505050565b60606000612a0483612dee565b60010190506000816001600160401b03811115612a2357612a2361312c565b6040519080825280601f01601f191660200182016040528015612a4d576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612a8657612a8b565b612a57565b509392505050565b6080820151612aaf90826020612aaa6000826141fc565b612ec4565b60809092019190915250565b6080820151612aaf90826020612ad26000826141fc565b612add9060206141fc565b612ae89060206141fc565b612af39060206141fc565b612aaa9060206141fc565b6080820151612aaf90826020612af36000826141fc565b6080820151612aaf90826020612b2c6000826141fc565b612ad29060206141fc565b6080820151612aaf90826020612ae86000826141fc565b6080820151612aaf90826020612b656000826141fc565b612b2c9060206141fc565b60006114668260000151600081518110612b8c57612b8c61412c565b6020026020010151600460ff1660006008612ba791906145ae565b60ff166129d8565b60006114668260000151600081518110612bcb57612bcb61412c565b6020026020010151600460ff1660006008612be691906145ae565b612bf19060046145ae565b612ba79060086145ae565b60006114668260000151600081518110612c1857612c1861412c565b6020026020010151600860ff1660006008612c3391906145ae565b612ba79060046145ae565b6060611466826001600160a01b03166014612ee9565b60608282604051602001612c69929190614912565b604051602081830303815290604052905092915050565b60608301516020810151610100909101516040516335083f4d60e01b815263ffffffff90911660048201526000916001600160a01b0316906335083f4d9060240160006040518083038186803b158015612cd957600080fd5b505afa158015612ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d15919081019061494e565b905083604001516001600160a01b0316635416bb118483600081518110612d3e57612d3e61412c565b602002602001015187606001516101000151612d5d89606001516126f9565b612d6a8a60600151612713565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015263ffffffff91909116604484015261ffff908116606484015216608482015260a4810185905260c401600060405180830381600087803b158015612dda57600080fd5b505af115801561242e573d6000803e3d6000fd5b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e2d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310612e57576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310612e7557662386f26fc10000830492506010015b6305f5e1008310612e8d576305f5e100830492506008015b6127108310612ea157612710830492506004015b60648310612eb3576064830492506002015b600a83106114665760010192915050565b600083821b8183612ed8600180881b613e90565b901b19969096161795945050505050565b60606000612ef8836002614982565b612f039060026141fc565b6001600160401b03811115612f1a57612f1a61312c565b6040519080825280601f01601f191660200182016040528015612f44576020820181803683370190505b509050600360fc1b81600081518110612f5f57612f5f61412c565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612f8e57612f8e61412c565b60200101906001600160f81b031916908160001a9053506000612fb2846002614982565b612fbd9060016141fc565b90505b6001811115613035576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ff157612ff161412c565b1a60f81b8282815181106130075761300761412c565b60200101906001600160f81b031916908160001a90535060049490941c9361302e816149a1565b9050612fc0565b5083156130845760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610344565b9392505050565b604080516080810182526000808252602082015260609181018290528181019190915290565b6001600160a01b03169052565b6001600160a01b0381168114610f5457600080fd5b80356130de816130be565b919050565b63ffffffff81168114610f5457600080fd5b80356130de816130e3565b803561ffff811681146130de57600080fd5b60ff81168114610f5457600080fd5b80356130de81613112565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156131645761316461312c565b60405290565b604080519081016001600160401b03811182821017156131645761316461312c565b60405161018081016001600160401b03811182821017156131645761316461312c565b604051602081016001600160401b03811182821017156131645761316461312c565b60405160e081016001600160401b03811182821017156131645761316461312c565b604051608081016001600160401b03811182821017156131645761316461312c565b604051601f8201601f191681016001600160401b038111828210171561323d5761323d61312c565b604052919050565b60006001600160401b0382111561325e5761325e61312c565b5060051b60200190565b8060040b8114610f5457600080fd5b600082601f83011261328857600080fd5b8135602061329d61329883613245565b613215565b82815260059290921b840181019181810190868411156132bc57600080fd5b8286015b848110156133f95780356001600160401b03808211156132df57600080fd5b9088019060a0828b03601f190112156132f757600080fd5b6132ff613142565b8683013561330c81613112565b815260408381013561331d816130be565b828901526060848101358284015260808501359083015260a0840135838111156133475760008081fd5b8085019450508b603f85011261335f57600092508283fd5b87840135925061337161329884613245565b83815260069390931b8401810192888101908d8511156133915760008081fd5b948201945b848610156133e35782868f0312156133ae5760008081fd5b6133b661316a565b86356133c1816130e3565b8152868b01356133d081613268565b818c015282529482019490890190613396565b60808401525050855250509183019183016132c0565b509695505050505050565b60006001600160401b0382111561341d5761341d61312c565b50601f01601f191660200190565b600082601f83011261343c57600080fd5b813561344a61329882613404565b81815284602083860101111561345f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121561349c57600080fd5b6134a58b6130d3565b99506134b360208c016130f5565b98506134c160408c01613100565b97506134cf60608c01613100565b96506134dd60808c01613121565b95506134eb60a08c016130d3565b94506134f960c08c016130f5565b935061350760e08c016130f5565b92506101008b01356001600160401b038082111561352457600080fd5b6135308e838f01613277565b93506101208d013591508082111561354757600080fd5b506135548d828e0161342b565b9150509295989b9194979a5092959850565b600082601f83011261357757600080fd5b8135602061358761329883613245565b82815260059290921b840181019181810190868411156135a657600080fd5b8286015b848110156133f9576135bb81613100565b83529183019183016135aa565b600080600080600060a086880312156135e057600080fd5b85356135eb816130be565b945060208601356135fb816130e3565b935060408601356001600160401b038082111561361757600080fd5b61362389838a0161342b565b945060608801359150613635826130be565b9092506080870135908082111561364b57600080fd5b5061365888828901613566565b9150509295509295909350565b60005b83811015613680578181015183820152602001613668565b8381111561368f576000848401525b50505050565b600081518084526136ad816020860160208601613665565b601f01601f19169290920160200192915050565b6020815260006130846020830184613695565b600080604083850312156136e757600080fd5b82356136f2816130be565b91506020830135613702816130e3565b809150509250929050565b6000806040838503121561372057600080fd5b823561372b816130be565b91506020830135613702816130be565b60006020828403121561374d57600080fd5b813561308481613112565b6001600160a01b0391909116815260200190565b6000806000806080858703121561378257600080fd5b843561378d816130be565b9350602085013561379d816130e3565b925060408501356001600160401b03808211156137b957600080fd5b6137c58883890161342b565b935060608701359150808211156137db57600080fd5b506137e887828801613566565b91505092959194509250565b60006020828403121561380657600080fd5b8135613084816130be565b8015158114610f5457600080fd5b6000806040838503121561383257600080fd5b823561383d81613112565b9150602083013561370281613811565b60208082526018908201527714185d5cd8589b194e881c185d5cd9590818da185b9b995b60421b604082015260600190565b80516130de81613112565b60006020828403121561389c57600080fd5b815161308481613112565b80516130de816130be565b6000602082840312156138c457600080fd5b8151613084816130be565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b80516130de816130e3565b600082601f83011261390d57600080fd5b8151602061391d61329883613245565b82815260059290921b8401810191818101908684111561393c57600080fd5b8286015b848110156133f95780516001600160401b038082111561395f57600080fd5b9088019060a0828b03601f1901121561397757600080fd5b61397f613142565b8683015161398c81613112565b815260408381015161399d816130be565b828901526060848101518284015260808501519083015260a0840151838111156139c75760008081fd5b8085019450508b603f8501126139df57600092508283fd5b8784015192506139f161329884613245565b83815260069390931b8401810192888101908d851115613a115760008081fd5b948201945b84861015613a635782868f031215613a2e5760008081fd5b613a3661316a565b8651613a41816130e3565b8152868b0151613a5081613268565b818c015282529482019490890190613a16565b6080840152505085525050918301918301613940565b600082601f830112613a8a57600080fd5b8151613a9861329882613404565b818152846020838601011115613aad57600080fd5b613abe826020830160208701613665565b949350505050565b60006101808284031215613ad957600080fd5b613ae161318c565b9050613aec826138a7565b8152613afa602083016138a7565b6020820152613b0b604083016138a7565b6040820152613b1c606083016138a7565b60608201526080820151608082015260a082015160a0820152613b4160c083016138f1565b60c0820152613b5260e083016138f1565b60e0820152610100613b658184016138f1565b90820152610120613b7783820161387f565b90820152610140828101516001600160401b0380821115613b9757600080fd5b613ba3868387016138fc565b83850152610160925082850151915080821115613bbf57600080fd5b50613bcc85828601613a79565b82840152505092915050565b600060208284031215613bea57600080fd5b81516001600160401b03811115613c0057600080fd5b613abe84828501613ac6565b6020808252601190820152707461736b206d75737420696e20444f4e4560781b604082015260600190565b6020808252601190820152703a30b9b5903bb937b7339031b0b63632b960791b604082015260600190565b600081518084526020808501808196508360051b810191508286016000805b86811015613d2d578385038a528251805160ff168652868101516001600160a01b031687870152604080820151818801526060808301519088015260809182015160a0928801839052805192880183905288019160c088019185915b80831015613d1757613d03848651805163ffffffff16825260209081015160040b910152565b938a01939281019260019290920191613cdd565b5050509a87019a95505091850191600101613c81565b509298975050505050505050565b6000610180613d4b8484516130b1565b6020830151613d5d60208601826130b1565b506040830151613d7060408601826130b1565b506060830151613d8360608601826130b1565b506080830151608085015260a083015160a085015260c0830151613daf60c086018263ffffffff169052565b5060e0830151613dc760e086018263ffffffff169052565b506101008381015163ffffffff16908501526101208084015160ff169085015261014080840151818601839052613e0083870182613c62565b925050506101608084015185830382870152613e1c8382613695565b9695505050505050565b604081526000613e396040830185613d3b565b905060018060a01b03831660208301529392505050565b63ffffffff9390931683526001600160a01b0391909116602083015260ff16604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613ea257613ea2613e7a565b500390565b600060208284031215613eb957600080fd5b5051919050565b60808152613ed26080820186516130b1565b60006020860151613ee660a08401826130b1565b506040860151613ef960c08401826130b1565b506060860151613f0c60e08401826130b1565b506080860151610100613f268185018363ffffffff169052565b60a08801519150610120613f3f8186018461ffff169052565b60c08901519250610140613f588187018561ffff169052565b60e08a01519350610160613f708188018660ff169052565b838b015163ffffffff16610180880152828b01516101a08801919091529350613f9d6101e0870185613c62565b9350808a015192505050607f19848303016101c0850152613fbe8282613695565b92505050613fcf60208301866130b1565b613fdc60408301856130b1565b63ffffffff831660608301525b95945050505050565b600082601f83011261400357600080fd5b8151602061401361329883613245565b82815260059290921b8401810191818101908684111561403257600080fd5b8286015b848110156133f9578051614049816130be565b8352918301918301614036565b60008060006060848603121561406b57600080fd5b83516001600160401b038082111561408257600080fd5b61408e87838801613ac6565b9450602086015191506140a082613112565b6040860151919350808211156140b557600080fd5b506140c286828701613ff2565b9150509250925092565b6001600160a01b0388811682528716602082015263ffffffff8616604082015260ff858116606083015261ffff85166080830152831660a082015260e060c0820181905260009061411f90830184613695565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181141561415a5761415a613e7a565b6001019392505050565b60006020828403121561417657600080fd5b604051602081016001600160401b0382821081831117156141995761419961312c565b8160405282935084519150808211156141b157600080fd5b506141be85828601613ff2565b8252505092915050565b6000602082840312156141da57600080fd5b81516001600160401b038111156141f057600080fd5b613abe84828501614164565b6000821982111561420f5761420f613e7a565b500190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008451614271818460208901613665565b8083019050600b60fa1b8082528551614291816001850160208a01613665565b600192019182015283516142ac816002840160208801613665565b0160020195945050505050565b6000602082840312156142cb57600080fd5b81518060030b811461308457600080fd5b6000602082840312156142ee57600080fd5b8151613084816130e3565b600060018060a01b038087168352602060808185015261431c6080850188613d3b565b848103604086015286518082528288019183019060005b8181101561435357835161ffff1683529284019291840191600101614333565b505080945050505080841660608401525095945050505050565b60006020828403121561437f57600080fd5b815161308481613811565b6001600160a01b0389811682528881166020830152878116604083015263ffffffff87811660608401529086166080830152841660a082015261010060c082018190526000906143dc83820186613695565b91505061ffff831660e08301529998505050505050505050565b6000602080838503121561440957600080fd5b82516001600160401b038082111561442057600080fd5b818501915082828703121561443457600080fd5b61443c6131af565b82518281111561444b57600080fd5b80840193505086601f84011261446057600080fd5b8251915061447061329883613245565b82815260059290921b8301840191848101908884111561448f57600080fd5b938501935b838510156144ad57845182529385019390850190614494565b8252509695505050505050565b805160208084528151848201819052600092820190839060408701905b808310156133f957835182529284019260019290920191908401906144d7565b60c08152600061450a60c08301896144ba565b6001600160a01b038881166020850152838203604085015261452c8289613d3b565b61ffff97909716606085015260ff9590951660808401525050911660a0909101529392505050565b60c08152600061456760c08301896144ba565b6001600160a01b03888116602085015283820360408501526145898289613d3b565b96166060840152505061ffff92909216608083015260ff1660a0909101529392505050565b600060ff821660ff84168060ff038211156145cb576145cb613e7a565b019392505050565b600080604083850312156145e657600080fd5b82516145f181613811565b60208401519092506001600160401b038082111561460e57600080fd5b9084019060e0828703121561462257600080fd5b61462a6131d1565b614633836138f1565b815260208301518281111561464757600080fd5b61465388828601613a79565b60208301525060408301518281111561466b57600080fd5b61467788828601613a79565b604083015250614689606084016138a7565b606082015261469a608084016138a7565b60808201526146ab60a0840161387f565b60a082015260c083015160c08201528093505050509250929050565b60018060a01b03815116825260ff602082015116602083015260006040820151608060408501526146fb6080850182613695565b905060608301518482036060860152613fe98282613695565b60408152600060018060a01b0380855116604084015280602086015116606084015280604086015116608084015250606084015160a08084015261475c60e0840182516130b1565b6020810151610100614770818601836130b1565b60408301519150610120614786818701846130b1565b6060840151925061014061479c818801856130b1565b60808501516101608881019190915260a0860151610180808a019190915260c087015163ffffffff9081166101a08b015260e088015181166101c08b015285880151166101e08a01528387015160ff166102008a0152828701516102208a0191909152945061480f610260890186613c62565b95015187860360df19016102408901529493506148329250839150849050613695565b915050608085015161484960c085018260ff169052565b508281036020840152613fe981856146c7565b60006020828403121561486e57600080fd5b81516001600160401b038082111561488557600080fd5b908301906080828603121561489957600080fd5b6148a16131f3565b82516148ac816130be565b815260208301516148bc81613112565b60208201526040830151828111156148d357600080fd5b6148df87828601613a79565b6040830152506060830151828111156148f757600080fd5b61490387828601613a79565b60608301525095945050505050565b60008351614924818460208801613665565b600b60fa1b9083019081528351614942816001840160208801613665565b01600101949350505050565b60006020828403121561496057600080fd5b81516001600160401b0381111561497657600080fd5b613abe84828501613ff2565b600081600019048311821515161561499c5761499c613e7a565b500290565b6000816149b0576149b0613e7a565b50600019019056fe2d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d206761732038202d2d2d2d2d2066696e697368656473d3c57098683edd6d6525f1ff914ba883af96664971e91756111fdfe8ba92276d75737420626c6f636b2e6e756d626572203e3d207461736b2e626c6f636b4e756d626572457865637574656d75737420626c6f636b2e74696d657374616d70203e3d207461736b2e74696d657374616d7045786563757465a2646970667358221220bfa59ffa9c28611b8aed4ae7c9d6ee24d17f3097068d17e91dcff2f550a3251264736f6c63430008080033",
  "deployedBytecode": "0x6080604052600436106100e25760003560e01c8063715018a611610085578063715018a6146102325780638da5cb5b1461024757806392db469614610265578063a0ee79bf14610278578063c80ac5f31461028b578063f081de0c146102a9578063f2fde38b146102c9578063f4933fea146102e9578063fe3ee169146102fc57600080fd5b80632b81042e1461012657806330f975231461013b57806334c76b251461014e5780633d7678741461018c578063485cc9551461019f57806354fd4d50146101bf5780635ac86ab7146101db5780636741fad21461020b57600080fd5b3661012157604080513381523460208201527fd6717f327e0cb88b4a97a7f67a453e9258252c34937ccbdd86de7cb840e7def3910160405180910390a1005b600080fd5b61013961013436600461347c565b61031c565b005b6101396101493660046135c8565b610618565b34801561015a57600080fd5b506040805180820182526006815265456e67696e6560d01b6020820152905161018391906136c1565b60405180910390f35b61013961019a3660046136d4565b61070c565b3480156101ab57600080fd5b506101396101ba36600461370d565b6109b6565b3480156101cb57600080fd5b5060405160018152602001610183565b3480156101e757600080fd5b506101fb6101f636600461373b565b610b09565b6040519015158152602001610183565b34801561021757600080fd5b506099546001600160a01b03165b6040516101839190613758565b34801561023e57600080fd5b50610139610b21565b34801561025357600080fd5b506033546001600160a01b0316610225565b61013961027336600461376c565b610b35565b61013961028636600461376c565b610e6d565b34801561029757600080fd5b506098546001600160a01b0316610225565b3480156102b557600080fd5b506101396102c43660046137f4565b610eb4565b3480156102d557600080fd5b506101396102e43660046137f4565b610ede565b6101396102f736600461376c565b610f57565b34801561030857600080fd5b5061013961031736600461381f565b61104e565b600161032781610b09565b1561034d5760405162461bcd60e51b81526004016103449061384d565b60405180910390fd5b610355611072565b604051633ae08c6560e01b815263ffffffff8b1660048201526001906001600160a01b038d1690633ae08c659060240160206040518083038186803b15801561039d57600080fd5b505afa1580156103b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d5919061388a565b60ff16146104255760405162461bcd60e51b815260206004820152601c60248201527f696e70757420636c7573746572206973206e6f7420656e61626c6564000000006044820152606401610344565b60008b6001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046057600080fd5b505afa158015610474573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049891906138b2565b6001600160a01b031663e53d7f7d8c8c8c6040518463ffffffff1660e01b81526004016104c7939291906138cf565b60206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610517919061388a565b905060ff81166001148061052e575060ff8116600b145b6105845760405162461bcd60e51b815260206004820152602160248201527f696e70757420636c75737465722072756c65206973206e6f7420656e61626c656044820152601960fa1b6064820152608401610344565b60408051610160810182523381526098546001600160a01b0390811660208301528e811692820192909252888216606082015263ffffffff808e16608083015261ffff808e1660a08401528c1660c083015260ff8b1660e083015287166101008201526101208101869052610140810185905260995490916106099183911689611088565b50505050505050505050505050565b600361062381610b09565b156106405760405162461bcd60e51b81526004016103449061384d565b604051636c51371d60e11b815263ffffffff861660048201526000906001600160a01b0388169063d8a26e3a9060240160006040518083038186803b15801561068857600080fd5b505afa15801561069c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c49190810190613bd8565b61012081015190915060ff16600a146106ef5760405162461bcd60e51b815260040161034490613c0c565b6101608101859052610703878286866111eb565b50505050505050565b600561071781610b09565b156107345760405162461bcd60e51b81526004016103449061384d565b604051636c51371d60e11b815263ffffffff831660048201526000906001600160a01b0385169063d8a26e3a9060240160006040518083038186803b15801561077c57600080fd5b505afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190613bd8565b61012081015190915060ff166001146108075760405162461bcd60e51b81526020600482015260116024820152701d185cdac81b5d5cdd081a5b8812539255607a1b6044820152606401610344565b80516001600160a01b031633146108305760405162461bcd60e51b815260040161034490613c37565b609854604051630483823d60e31b815273__$1d93808c49adb5062914c75723341b8fb1$__9163241c11e8916108769185916001600160a01b0390911690600401613e26565b60006040518083038186803b15801561088e57600080fd5b505af41580156108a2573d6000803e3d6000fd5b5050505060408181015190516306a264dd60e41b81526001600160a01b03861691636a264dd0916108da918791601490600401613e50565b600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050505080610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528360200151878560c001516014600061094989611431565b604080516001600160a01b03978816815295909616602086015263ffffffff939093168486015260ff918216606085015261ffff1660808401521660a082015260e060c0820181905260029082015261060f60f31b6101008201529051908190036101200190a350505050565b600054610100900460ff16158080156109d65750600054600160ff909116105b806109f05750303b1580156109f0575060005460ff166001145b610a535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610344565b6000805460ff191660011790558015610a76576000805461ff0019166101001790555b610a7e61146c565b610a86611493565b610a8e61146c565b609880546001600160a01b038086166001600160a01b03199283161790925560998054928516929091169190911790558015610b04576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60ff9081166000908152606560205260409020541690565b610b296114c3565b610b33600061151d565b565b6002610b4081610b09565b15610b5d5760405162461bcd60e51b81526004016103449061384d565b60005a604051636c51371d60e11b815263ffffffff871660048201529091506000906001600160a01b0388169063d8a26e3a9060240160006040518083038186803b158015610bab57600080fd5b505afa158015610bbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610be79190810190613bd8565b80519091506001600160a01b03163314610c135760405162461bcd60e51b815260040161034490613c37565b61012081015160ff16600114801590610c35575061012081015160ff16600514155b15610ca55760405162461bcd60e51b815260206004820152603a60248201527f7461736b2065786563757465206d75737420696e205441534b5f53544154455f60448201527912539415550b151054d2d7d4d510551157d41493d0d154d4d15160321b6064820152608401610344565b61016081018590526000610cb88261156f565b60ff161415610d3857610cca81611582565b63ffffffff16421015610d146040518060600160405280602d8152602001614a2c602d9139610cf84261159c565b610d0f610d0486611582565b63ffffffff1661159c565b6115a7565b90610d325760405162461bcd60e51b815260040161034491906136c1565b50610da2565b610d41816115d6565b63ffffffff16610d4f61161c565b1015610d826040518060600160405280602c8152602001614a00602c9139610d764361159c565b610d0f610d04866115d6565b90610da05760405162461bcd60e51b815260040161034491906136c1565b505b610dad8782866116a8565b60005a610dba9084613e90565b60995460405163a80bf44360e01b815230600482015260016024820152604481018390529192506000916001600160a01b039091169063a80bf4439034906064016020604051808303818588803b158015610e1457600080fd5b505af1158015610e28573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e4d9190613ea7565b9050610e6233610e5d8334613e90565b61219f565b505050505050505050565b6004610e7881610b09565b15610e955760405162461bcd60e51b81526004016103449061384d565b610ea185858585610b35565b610ead85858585610f57565b5050505050565b610ebc6114c3565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610ee66114c3565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610344565b610f548161151d565b50565b6003610f6281610b09565b15610f7f5760405162461bcd60e51b81526004016103449061384d565b604051636c51371d60e11b815263ffffffff851660048201526000906001600160a01b0387169063d8a26e3a9060240160006040518083038186803b158015610fc757600080fd5b505afa158015610fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110039190810190613bd8565b61012081015190915060ff16600a1461102e5760405162461bcd60e51b815260040161034490613c0c565b610160810184905280516110469087908390866111eb565b505050505050565b6110566114c3565b801561106957611065826122b5565b5050565b6110658261234a565b609754611082576301312d006097555b5a609755565b600080600073__$ee3bf710910d501adf17576e3f6132303f$__63ad61cd2187878960600151886040518563ffffffff1660e01b81526004016110ce9493929190613ec0565b60006040518083038186803b1580156110e657600080fd5b505af41580156110fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111229190810190614056565b92509250925061113586868585856123e2565b600063ffffffff85161561114b5750600261114f565b5060015b83610100015163ffffffff16336001600160a01b03166000805160206149e083398151915286602001518a606001518860c001518660008e60e001518f61014001516040516111a497969594939291906140cc565b60405180910390a360608701516040805160008152602081019091526111cc919086906116a8565b6107036040518060600160405280602781526020016149b96027913950565b8051611296576111fa83612438565b60ff166001600160401b038111156112145761121461312c565b60405190808252806020026020018201604052801561123d578160200160208202803683370190505b50905060005b61124c84612438565b60ff168161ffff1610156112945780828261ffff16815181106112715761127161412c565b61ffff9092166020928302919091019091015261128d81614142565b9050611243565b505b60c083015160e084015163ffffffff16156112b2575060e08301515b60005b82518161ffff161015611302576000838261ffff16815181106112da576112da61412c565b602002602001015190506112f18787878487612473565b506112fb81614142565b90506112b5565b506040805160a0810182523381526001600160a01b0387811660208084019190915260995482168385015260608084018990526001608080860191909152855190810186528986015190931683526002838301528451808301865260008082528487019190915285518181529283019095529293928201908152509050600086602001516001600160a01b031663dceacb0e8861010001516113a38a6126f9565b6113ac8b612713565b6040518463ffffffff1660e01b81526004016113ca939291906138cf565b600060405180830381600087803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261142091908101906141c8565b9050610e628382600001518461272d565b60006114668260a0015160086000600861144b91906141fc565b6114569060106141fc565b6114619060106141fc565b6129d8565b92915050565b600054610100900460ff16610b335760405162461bcd60e51b815260040161034490614214565b600054610100900460ff166114ba5760405162461bcd60e51b815260040161034490614214565b610b333361151d565b6033546001600160a01b03163314610b335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610344565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006114668260a00151600860006129d8565b6000611466826080015160206000602061146191906141fc565b6060611466826129f7565b60608383836040516020016115be9392919061425f565b60405160208183030381529060405290509392505050565b600061146682608001516020600060206115f091906141fc565b6115fb9060206141fc565b6116069060206141fc565b6116119060206141fc565b6114619060206141fc565b60004661a4b18114156116a15760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561166357600080fd5b505afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190613ea7565b91505090565b4391505090565b60408051602081019091526060815261012083015160ff1660011415611d645760608301516000906001600160a01b0316156117ee576040805160a08101825233815261010086015163ffffffff166020820152600091810161170a87611431565b60ff16815260200161171b87612438565b60ff908116825260c088015163ffffffff9081166020938401526060808a015160408051635b774b6f60e11b815287516001600160a01b0390811660048301529688015185166024820152908701518516604482015291860151909316606482015260808501519091166084820152929350169063b6ee96de9060a401602060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea91906142b9565b9150505b8060030b600014611b7c57604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0808301849052610100830184905261012083019390935261014082018190526101608201529085015163ffffffff16156118f6575060e0840151604051636c51371d60e11b815263ffffffff909116600482015284906001600160a01b0387169063d8a26e3a9060240160006040518083038186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f39190810190613bd8565b94505b60c0850151604051630cd49c6160e21b815263ffffffff9091166004820152600383900b60248201526000906001600160a01b03881690633352718490604401602060405180830381600087803b15801561195057600080fd5b505af1158015611964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198891906142dc565b905060006119958761156f565b60ff1614156119b6576119b18663ffffffff80841690612a9316565b6119c9565b6119c98663ffffffff80841690612abb16565b85602001516001600160a01b031663c7d6bff18761010001516119eb896126f9565b6119f48a612713565b6040518463ffffffff1660e01b8152600401611a12939291906138cf565b600060405180830381600087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a6891908101906141c8565b8051805191955090611a7c90600190613e90565b81518110611a8c57611a8c61412c565b60209081029190910101516001600160a01b03908116604080850191909152609854905163a7c3cfd760e01b815273__$92e364a4eff7a9bc4f199d55197cbc7995$__9263a7c3cfd792611aeb928c9288928c929116906004016142f9565b60006040518083038186803b158015611b0357600080fd5b505af4158015611b17573d6000803e3d6000fd5b5050505081610100015163ffffffff16336001600160a01b03166000805160206149e083398151915284602001518a8660c00151600a6000611b588a611431565b8e6101600151604051611b7197969594939291906140cc565b60405180910390a350505b6000611b878561156f565b60ff161415611bb257611b9984611582565b63ffffffff16421015611bad575050505050565b611bd6565b611bbb846115d6565b63ffffffff16611bc961161c565b1015611bd6575050505050565b600084602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1557600080fd5b505afa158015611c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4d91906138b2565b6001600160a01b031663cb963bba866101000151611c6a886126f9565b611c7389612713565b611c7c8a612438565b6040516001600160e01b031960e087901b16815263ffffffff94909416600485015261ffff92831660248501529116604483015260ff166064820152608401602060405180830381600087803b158015611cd557600080fd5b505af1158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d919061436d565b905080611d615780611d615760405162461bcd60e51b815260206004820181905260248201527f72756c654c656674436f756e74206e6f7420656e6f75676820746f2063616c6c6044820152606401610344565b50505b805151611e0d5782602001516001600160a01b031663c7d6bff1846101000151611d8d866126f9565b611d9687612713565b6040518463ffffffff1660e01b8152600401611db4939291906138cf565b600060405180830381600087803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e0a91908101906141c8565b90505b6040805160a0810182523381526001600160a01b038681166020808401919091526099548216838501526060808401889052600160808086019190915285519081018652888601519093168352600283830152845180830186526000808252848701919091528551908152918201909452928101929092528251909190611e969083908361272d565b602081015190915060ff1660051415611f0f5784610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c0015160016000611ee68d611431565b8d6101600151604051611eff97969594939291906140cc565b60405180910390a3505050505050565b61012085015160ff16600114156120225760c085015181516040516306a264dd60e41b81526001600160a01b03891692636a264dd092611f5492600590600401613e50565b600060405180830381600087803b158015611f6e57600080fd5b505af1158015611f82573d6000803e3d6000fd5b50505050611f994286612afe90919063ffffffff16565b611fab611fa461161c565b8690612b15565b84610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c0015160056000611fe88d611431565b8d610160015160405161200197969594939291906140cc565b60405180910390a3600561012086015280516001600160a01b031660408601525b602081015160ff16600a141561206f5784610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c0015160056000611ee68d611431565b602081015160ff166064148061208c5750602081015160ff1660c8145b156121935760c085015181516040516306a264dd60e41b81526001600160a01b03891692636a264dd0926120c592600a90600401613e50565b600060405180830381600087803b1580156120df57600080fd5b505af11580156120f3573d6000803e3d6000fd5b5050505061210a4286612b3790919063ffffffff16565b61211c61211561161c565b8690612b4e565b84610100015163ffffffff16336001600160a01b03166000805160206149e08339815191528760200151898960c00151600a60006121598d611431565b8d610160015160405161217297969594939291906140cc565b60405180910390a3600a61012086015280516001600160a01b031660408601525b611046868633876111eb565b804710156121ef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610344565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461223c576040519150601f19603f3d011682016040523d82523d6000602084013e612241565b606091505b5050905080610b045760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610344565b806122bf81610b09565b156122dc5760405162461bcd60e51b81526004016103449061384d565b60ff82166000908152606560205260409020805460ff191660011790557f0116a706473db0e0938996f608b9894b96b1583d307f8c605ec7fccb6d7a8cdb826123223390565b6040805160ff90931683526001600160a01b0390911660208301520160405180910390a15050565b8061235481610b09565b6123a05760405162461bcd60e51b815260206004820152601c60248201527f5061757361626c653a206e6f7420706175736564206368616e6e656c000000006044820152606401610344565b60ff82166000908152606560205260409020805460ff191690557fe33b1e8c9a3225cc5a849e3f9c6d9c272be7915b24983c2a048dfe7c79390f418233612322565b6040805160a0810182523381526060808801516001600160a01b0390811660208401528716928201929092529081018490526000608082015261242361308b565b61242e82848361272d565b5050505050505050565b60006114668260a0015160106000600861245291906141fc565b61245d9060106141fc565b6124689060106141fc565b6114619060086141fc565b600084604001516001600160a01b0316631eda6e4f308688602001518961010001518b888c61016001518b6040518963ffffffff1660e01b81526004016124c198979695949392919061438a565b60006040518083038186803b1580156124d957600080fd5b505afa1580156124ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261251591908101906143f6565b90506000600161252483612b70565b60ff161490506000600161253784612baf565b60ff16149050856001600160a01b031687600001516001600160a01b031614801561255f5750815b156125ee5773__$92e364a4eff7a9bc4f199d55197cbc7995$__63e170ae4f848a8a8961258b89612bfc565b6098546040516001600160e01b031960e089901b1681526125bd9695949392916001600160a01b0316906004016144f7565b60006040518083038186803b1580156125d557600080fd5b505af41580156125e9573d6000803e3d6000fd5b505050505b60e087015163ffffffff1615806126025750805b156126815773__$92e364a4eff7a9bc4f199d55197cbc7995$__63ae626701848a8a8a8a61262f8a612bfc565b6040518763ffffffff1660e01b815260040161265096959493929190614554565b60006040518083038186803b15801561266857600080fd5b505af415801561267c573d6000803e3d6000fd5b505050505b61012087015160ff16600a141561242e5786610100015163ffffffff16336001600160a01b03166000805160206149e083398151915289602001518b8b60c00151601e8b6126ce8b612bfc565b8f61016001516040516126e797969594939291906140cc565b60405180910390a35050505050505050565b60006114668260a0015160106000600861146191906141fc565b60006114668260a0015160106000600861145691906141fc565b61273561308b565b60005b83518160ff1610156129cf576000846127528360016145ae565b60ff16815181106127655761276561412c565b60200260200101519050600080868460ff16815181106127875761278761412c565b60200260200101516001600160a01b031663c2bc2efc846040518263ffffffff1660e01b81526004016127ba9190613758565b60006040518083038186803b1580156127d257600080fd5b505afa1580156127e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261280e91908101906145d3565b915091508161287757816128576040518060400160405280601581526020017468616e646c6572206e6f7420617661696c61626c6560581b81525061285286612c3e565b612c54565b906128755760405162461bcd60e51b815260040161034491906136c1565b505b60005a90506000846001600160a01b03166395edcb088b8a6040518363ffffffff1660e01b81526004016128ac929190614714565b600060405180830381600087803b1580156128c657600080fd5b505af11580156128da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612902919081019061485c565b90506129198a865a6129149086613e90565b612c80565b602081015160ff16600114156129965760006129766040518060400160405280601f81526020017f68616e646c65722070726f63657373206661696c7572652068616e646c6572008152508360400151610d0f8e60000151612c3e565b906129945760405162461bcd60e51b815260040161034491906136c1565b505b80975060c860ff16816020015160ff1614156129b65750505050506129cf565b50505050508060026129c891906145ae565b9050612738565b50909392505050565b91821c916000806129ec600180861b613e90565b909416949350505050565b60606000612a0483612dee565b60010190506000816001600160401b03811115612a2357612a2361312c565b6040519080825280601f01601f191660200182016040528015612a4d576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612a8657612a8b565b612a57565b509392505050565b6080820151612aaf90826020612aaa6000826141fc565b612ec4565b60809092019190915250565b6080820151612aaf90826020612ad26000826141fc565b612add9060206141fc565b612ae89060206141fc565b612af39060206141fc565b612aaa9060206141fc565b6080820151612aaf90826020612af36000826141fc565b6080820151612aaf90826020612b2c6000826141fc565b612ad29060206141fc565b6080820151612aaf90826020612ae86000826141fc565b6080820151612aaf90826020612b656000826141fc565b612b2c9060206141fc565b60006114668260000151600081518110612b8c57612b8c61412c565b6020026020010151600460ff1660006008612ba791906145ae565b60ff166129d8565b60006114668260000151600081518110612bcb57612bcb61412c565b6020026020010151600460ff1660006008612be691906145ae565b612bf19060046145ae565b612ba79060086145ae565b60006114668260000151600081518110612c1857612c1861412c565b6020026020010151600860ff1660006008612c3391906145ae565b612ba79060046145ae565b6060611466826001600160a01b03166014612ee9565b60608282604051602001612c69929190614912565b604051602081830303815290604052905092915050565b60608301516020810151610100909101516040516335083f4d60e01b815263ffffffff90911660048201526000916001600160a01b0316906335083f4d9060240160006040518083038186803b158015612cd957600080fd5b505afa158015612ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d15919081019061494e565b905083604001516001600160a01b0316635416bb118483600081518110612d3e57612d3e61412c565b602002602001015187606001516101000151612d5d89606001516126f9565b612d6a8a60600151612713565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015263ffffffff91909116604484015261ffff908116606484015216608482015260a4810185905260c401600060405180830381600087803b158015612dda57600080fd5b505af115801561242e573d6000803e3d6000fd5b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e2d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310612e57576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310612e7557662386f26fc10000830492506010015b6305f5e1008310612e8d576305f5e100830492506008015b6127108310612ea157612710830492506004015b60648310612eb3576064830492506002015b600a83106114665760010192915050565b600083821b8183612ed8600180881b613e90565b901b19969096161795945050505050565b60606000612ef8836002614982565b612f039060026141fc565b6001600160401b03811115612f1a57612f1a61312c565b6040519080825280601f01601f191660200182016040528015612f44576020820181803683370190505b509050600360fc1b81600081518110612f5f57612f5f61412c565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612f8e57612f8e61412c565b60200101906001600160f81b031916908160001a9053506000612fb2846002614982565b612fbd9060016141fc565b90505b6001811115613035576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ff157612ff161412c565b1a60f81b8282815181106130075761300761412c565b60200101906001600160f81b031916908160001a90535060049490941c9361302e816149a1565b9050612fc0565b5083156130845760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610344565b9392505050565b604080516080810182526000808252602082015260609181018290528181019190915290565b6001600160a01b03169052565b6001600160a01b0381168114610f5457600080fd5b80356130de816130be565b919050565b63ffffffff81168114610f5457600080fd5b80356130de816130e3565b803561ffff811681146130de57600080fd5b60ff81168114610f5457600080fd5b80356130de81613112565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156131645761316461312c565b60405290565b604080519081016001600160401b03811182821017156131645761316461312c565b60405161018081016001600160401b03811182821017156131645761316461312c565b604051602081016001600160401b03811182821017156131645761316461312c565b60405160e081016001600160401b03811182821017156131645761316461312c565b604051608081016001600160401b03811182821017156131645761316461312c565b604051601f8201601f191681016001600160401b038111828210171561323d5761323d61312c565b604052919050565b60006001600160401b0382111561325e5761325e61312c565b5060051b60200190565b8060040b8114610f5457600080fd5b600082601f83011261328857600080fd5b8135602061329d61329883613245565b613215565b82815260059290921b840181019181810190868411156132bc57600080fd5b8286015b848110156133f95780356001600160401b03808211156132df57600080fd5b9088019060a0828b03601f190112156132f757600080fd5b6132ff613142565b8683013561330c81613112565b815260408381013561331d816130be565b828901526060848101358284015260808501359083015260a0840135838111156133475760008081fd5b8085019450508b603f85011261335f57600092508283fd5b87840135925061337161329884613245565b83815260069390931b8401810192888101908d8511156133915760008081fd5b948201945b848610156133e35782868f0312156133ae5760008081fd5b6133b661316a565b86356133c1816130e3565b8152868b01356133d081613268565b818c015282529482019490890190613396565b60808401525050855250509183019183016132c0565b509695505050505050565b60006001600160401b0382111561341d5761341d61312c565b50601f01601f191660200190565b600082601f83011261343c57600080fd5b813561344a61329882613404565b81815284602083860101111561345f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121561349c57600080fd5b6134a58b6130d3565b99506134b360208c016130f5565b98506134c160408c01613100565b97506134cf60608c01613100565b96506134dd60808c01613121565b95506134eb60a08c016130d3565b94506134f960c08c016130f5565b935061350760e08c016130f5565b92506101008b01356001600160401b038082111561352457600080fd5b6135308e838f01613277565b93506101208d013591508082111561354757600080fd5b506135548d828e0161342b565b9150509295989b9194979a5092959850565b600082601f83011261357757600080fd5b8135602061358761329883613245565b82815260059290921b840181019181810190868411156135a657600080fd5b8286015b848110156133f9576135bb81613100565b83529183019183016135aa565b600080600080600060a086880312156135e057600080fd5b85356135eb816130be565b945060208601356135fb816130e3565b935060408601356001600160401b038082111561361757600080fd5b61362389838a0161342b565b945060608801359150613635826130be565b9092506080870135908082111561364b57600080fd5b5061365888828901613566565b9150509295509295909350565b60005b83811015613680578181015183820152602001613668565b8381111561368f576000848401525b50505050565b600081518084526136ad816020860160208601613665565b601f01601f19169290920160200192915050565b6020815260006130846020830184613695565b600080604083850312156136e757600080fd5b82356136f2816130be565b91506020830135613702816130e3565b809150509250929050565b6000806040838503121561372057600080fd5b823561372b816130be565b91506020830135613702816130be565b60006020828403121561374d57600080fd5b813561308481613112565b6001600160a01b0391909116815260200190565b6000806000806080858703121561378257600080fd5b843561378d816130be565b9350602085013561379d816130e3565b925060408501356001600160401b03808211156137b957600080fd5b6137c58883890161342b565b935060608701359150808211156137db57600080fd5b506137e887828801613566565b91505092959194509250565b60006020828403121561380657600080fd5b8135613084816130be565b8015158114610f5457600080fd5b6000806040838503121561383257600080fd5b823561383d81613112565b9150602083013561370281613811565b60208082526018908201527714185d5cd8589b194e881c185d5cd9590818da185b9b995b60421b604082015260600190565b80516130de81613112565b60006020828403121561389c57600080fd5b815161308481613112565b80516130de816130be565b6000602082840312156138c457600080fd5b8151613084816130be565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b80516130de816130e3565b600082601f83011261390d57600080fd5b8151602061391d61329883613245565b82815260059290921b8401810191818101908684111561393c57600080fd5b8286015b848110156133f95780516001600160401b038082111561395f57600080fd5b9088019060a0828b03601f1901121561397757600080fd5b61397f613142565b8683015161398c81613112565b815260408381015161399d816130be565b828901526060848101518284015260808501519083015260a0840151838111156139c75760008081fd5b8085019450508b603f8501126139df57600092508283fd5b8784015192506139f161329884613245565b83815260069390931b8401810192888101908d851115613a115760008081fd5b948201945b84861015613a635782868f031215613a2e5760008081fd5b613a3661316a565b8651613a41816130e3565b8152868b0151613a5081613268565b818c015282529482019490890190613a16565b6080840152505085525050918301918301613940565b600082601f830112613a8a57600080fd5b8151613a9861329882613404565b818152846020838601011115613aad57600080fd5b613abe826020830160208701613665565b949350505050565b60006101808284031215613ad957600080fd5b613ae161318c565b9050613aec826138a7565b8152613afa602083016138a7565b6020820152613b0b604083016138a7565b6040820152613b1c606083016138a7565b60608201526080820151608082015260a082015160a0820152613b4160c083016138f1565b60c0820152613b5260e083016138f1565b60e0820152610100613b658184016138f1565b90820152610120613b7783820161387f565b90820152610140828101516001600160401b0380821115613b9757600080fd5b613ba3868387016138fc565b83850152610160925082850151915080821115613bbf57600080fd5b50613bcc85828601613a79565b82840152505092915050565b600060208284031215613bea57600080fd5b81516001600160401b03811115613c0057600080fd5b613abe84828501613ac6565b6020808252601190820152707461736b206d75737420696e20444f4e4560781b604082015260600190565b6020808252601190820152703a30b9b5903bb937b7339031b0b63632b960791b604082015260600190565b600081518084526020808501808196508360051b810191508286016000805b86811015613d2d578385038a528251805160ff168652868101516001600160a01b031687870152604080820151818801526060808301519088015260809182015160a0928801839052805192880183905288019160c088019185915b80831015613d1757613d03848651805163ffffffff16825260209081015160040b910152565b938a01939281019260019290920191613cdd565b5050509a87019a95505091850191600101613c81565b509298975050505050505050565b6000610180613d4b8484516130b1565b6020830151613d5d60208601826130b1565b506040830151613d7060408601826130b1565b506060830151613d8360608601826130b1565b506080830151608085015260a083015160a085015260c0830151613daf60c086018263ffffffff169052565b5060e0830151613dc760e086018263ffffffff169052565b506101008381015163ffffffff16908501526101208084015160ff169085015261014080840151818601839052613e0083870182613c62565b925050506101608084015185830382870152613e1c8382613695565b9695505050505050565b604081526000613e396040830185613d3b565b905060018060a01b03831660208301529392505050565b63ffffffff9390931683526001600160a01b0391909116602083015260ff16604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613ea257613ea2613e7a565b500390565b600060208284031215613eb957600080fd5b5051919050565b60808152613ed26080820186516130b1565b60006020860151613ee660a08401826130b1565b506040860151613ef960c08401826130b1565b506060860151613f0c60e08401826130b1565b506080860151610100613f268185018363ffffffff169052565b60a08801519150610120613f3f8186018461ffff169052565b60c08901519250610140613f588187018561ffff169052565b60e08a01519350610160613f708188018660ff169052565b838b015163ffffffff16610180880152828b01516101a08801919091529350613f9d6101e0870185613c62565b9350808a015192505050607f19848303016101c0850152613fbe8282613695565b92505050613fcf60208301866130b1565b613fdc60408301856130b1565b63ffffffff831660608301525b95945050505050565b600082601f83011261400357600080fd5b8151602061401361329883613245565b82815260059290921b8401810191818101908684111561403257600080fd5b8286015b848110156133f9578051614049816130be565b8352918301918301614036565b60008060006060848603121561406b57600080fd5b83516001600160401b038082111561408257600080fd5b61408e87838801613ac6565b9450602086015191506140a082613112565b6040860151919350808211156140b557600080fd5b506140c286828701613ff2565b9150509250925092565b6001600160a01b0388811682528716602082015263ffffffff8616604082015260ff858116606083015261ffff85166080830152831660a082015260e060c0820181905260009061411f90830184613695565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181141561415a5761415a613e7a565b6001019392505050565b60006020828403121561417657600080fd5b604051602081016001600160401b0382821081831117156141995761419961312c565b8160405282935084519150808211156141b157600080fd5b506141be85828601613ff2565b8252505092915050565b6000602082840312156141da57600080fd5b81516001600160401b038111156141f057600080fd5b613abe84828501614164565b6000821982111561420f5761420f613e7a565b500190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008451614271818460208901613665565b8083019050600b60fa1b8082528551614291816001850160208a01613665565b600192019182015283516142ac816002840160208801613665565b0160020195945050505050565b6000602082840312156142cb57600080fd5b81518060030b811461308457600080fd5b6000602082840312156142ee57600080fd5b8151613084816130e3565b600060018060a01b038087168352602060808185015261431c6080850188613d3b565b848103604086015286518082528288019183019060005b8181101561435357835161ffff1683529284019291840191600101614333565b505080945050505080841660608401525095945050505050565b60006020828403121561437f57600080fd5b815161308481613811565b6001600160a01b0389811682528881166020830152878116604083015263ffffffff87811660608401529086166080830152841660a082015261010060c082018190526000906143dc83820186613695565b91505061ffff831660e08301529998505050505050505050565b6000602080838503121561440957600080fd5b82516001600160401b038082111561442057600080fd5b818501915082828703121561443457600080fd5b61443c6131af565b82518281111561444b57600080fd5b80840193505086601f84011261446057600080fd5b8251915061447061329883613245565b82815260059290921b8301840191848101908884111561448f57600080fd5b938501935b838510156144ad57845182529385019390850190614494565b8252509695505050505050565b805160208084528151848201819052600092820190839060408701905b808310156133f957835182529284019260019290920191908401906144d7565b60c08152600061450a60c08301896144ba565b6001600160a01b038881166020850152838203604085015261452c8289613d3b565b61ffff97909716606085015260ff9590951660808401525050911660a0909101529392505050565b60c08152600061456760c08301896144ba565b6001600160a01b03888116602085015283820360408501526145898289613d3b565b96166060840152505061ffff92909216608083015260ff1660a0909101529392505050565b600060ff821660ff84168060ff038211156145cb576145cb613e7a565b019392505050565b600080604083850312156145e657600080fd5b82516145f181613811565b60208401519092506001600160401b038082111561460e57600080fd5b9084019060e0828703121561462257600080fd5b61462a6131d1565b614633836138f1565b815260208301518281111561464757600080fd5b61465388828601613a79565b60208301525060408301518281111561466b57600080fd5b61467788828601613a79565b604083015250614689606084016138a7565b606082015261469a608084016138a7565b60808201526146ab60a0840161387f565b60a082015260c083015160c08201528093505050509250929050565b60018060a01b03815116825260ff602082015116602083015260006040820151608060408501526146fb6080850182613695565b905060608301518482036060860152613fe98282613695565b60408152600060018060a01b0380855116604084015280602086015116606084015280604086015116608084015250606084015160a08084015261475c60e0840182516130b1565b6020810151610100614770818601836130b1565b60408301519150610120614786818701846130b1565b6060840151925061014061479c818801856130b1565b60808501516101608881019190915260a0860151610180808a019190915260c087015163ffffffff9081166101a08b015260e088015181166101c08b015285880151166101e08a01528387015160ff166102008a0152828701516102208a0191909152945061480f610260890186613c62565b95015187860360df19016102408901529493506148329250839150849050613695565b915050608085015161484960c085018260ff169052565b508281036020840152613fe981856146c7565b60006020828403121561486e57600080fd5b81516001600160401b038082111561488557600080fd5b908301906080828603121561489957600080fd5b6148a16131f3565b82516148ac816130be565b815260208301516148bc81613112565b60208201526040830151828111156148d357600080fd5b6148df87828601613a79565b6040830152506060830151828111156148f757600080fd5b61490387828601613a79565b60608301525095945050505050565b60008351614924818460208801613665565b600b60fa1b9083019081528351614942816001840160208801613665565b01600101949350505050565b60006020828403121561496057600080fd5b81516001600160401b0381111561497657600080fd5b613abe84828501613ff2565b600081600019048311821515161561499c5761499c613e7a565b500290565b6000816149b0576149b0613e7a565b50600019019056fe2d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d206761732038202d2d2d2d2d2066696e697368656473d3c57098683edd6d6525f1ff914ba883af96664971e91756111fdfe8ba92276d75737420626c6f636b2e6e756d626572203e3d207461736b2e626c6f636b4e756d626572457865637574656d75737420626c6f636b2e74696d657374616d70203e3d207461736b2e74696d657374616d7045786563757465a2646970667358221220bfa59ffa9c28611b8aed4ae7c9d6ee24d17f3097068d17e91dcff2f550a3251264736f6c63430008080033",
  "linkReferences": {
    "contracts/V3/EngineInput.sol": {
      "EngineInput": [
        {
          "length": 20,
          "start": 4271
        }
      ]
    },
    "contracts/V3/EngineOutput.sol": {
      "EngineOutput": [
        {
          "length": 20,
          "start": 6876
        },
        {
          "length": 20,
          "start": 9606
        },
        {
          "length": 20,
          "start": 9769
        }
      ]
    },
    "contracts/V3/EngineUtil.sol": {
      "EngineUtil": [
        {
          "length": 20,
          "start": 2146
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/V3/EngineInput.sol": {
      "EngineInput": [
        {
          "length": 20,
          "start": 4239
        }
      ]
    },
    "contracts/V3/EngineOutput.sol": {
      "EngineOutput": [
        {
          "length": 20,
          "start": 6844
        },
        {
          "length": 20,
          "start": 9574
        },
        {
          "length": 20,
          "start": 9737
        }
      ]
    },
    "contracts/V3/EngineUtil.sol": {
      "EngineUtil": [
        {
          "length": 20,
          "start": 2114
        }
      ]
    }
  }
}
