{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenHandlerUtil",
  "sourceName": "contracts/V3/util/TokenHandlerUtil.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "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": "tokenSlotIndex",
          "type": "uint8"
        },
        {
          "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": "stdTokenSlotOutput",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "inBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "inBranchProcess",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "outBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "outBranchProcess",
              "type": "uint8"
            },
            {
              "internalType": "uint24",
              "name": "times",
              "type": "uint24"
            },
            {
              "internalType": "uint32",
              "name": "multiple",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "random",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ratio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ratioDenominator",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "tokenCount",
              "type": "uint8"
            },
            {
              "internalType": "uint256[]",
              "name": "tokenIdList",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tokenAmountList",
              "type": "uint256[]"
            },
            {
              "internalType": "uint8[]",
              "name": "tokenIndexList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "outAddressList",
              "type": "address[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranchParams",
          "name": "tokenBranchParams",
          "type": "tuple"
        }
      ],
      "name": "processTokenHandler",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "idIndex",
              "type": "uint256"
            }
          ],
          "internalType": "struct Token.TokenHandler",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x611eb361003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80631231db5314610045578063e34796531461007f575b600080fd5b610058610053366004611a25565b6100ad565b60408051825181526020808401519082015291810151908201526060015b60405180910390f35b81801561008b57600080fd5b5061009f61009a366004611bc5565b610184565b604051908152602001610076565b6100b56112f8565b6100bd6112f8565b6100ce8585838760000151876101bd565b9050600083610120015160ff161180156100f2575082610120015160ff168560ff16105b15610123578261014001518560ff168151811061011157610111611c1d565b6020908102919091010151815261017a565b83515160ff166002141561014e576101478787856040015184898960000151610756565b905061017a565b83515160ff166003141561017a5761017787878560400151848989600001518960c001516108e8565b90505b9695505050505050565b600081610193576301312d0091505b60005a6101a09084611c49565b90506301312d008310156101b2575a92505b829150505b92915050565b6101c56112f8565b60006101d48660000151610b59565b9050600083610120015160ff161180156101f8575082610120015160ff168760ff16105b1561022d578261016001518760ff168151811061021757610217611c1d565b602002602001015185602001818152505061074b565b85515160ff161580610244575085515160ff166001145b1561054957600061025485610d77565b87515190915060129060ff16600114156103bb5785602001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156102a557600080fd5b505afa9250505080156102d5575060408051601f3d908101601f191682019092526102d291810190611c60565b60015b6103b857600090506000836000815181106102f2576102f2611c1d565b60200260200101518460018151811061030d5761030d611c1d565b602002602001015161031f9190611c49565b61032a906001611c79565b9050808660c0015161033c9190611ca7565b8460008151811061034f5761034f611c1d565b60200260200101516103619190611c79565b6020890181905260a087015161010088015160e08901516127109363ffffffff9093169261038f9190611cbb565b6103999190611cda565b6103a39190611cbb565b6103ad9190611cda565b6020890152506103bb565b90505b801561054257600060648360ff1610156103ee576103dc60ff841683611c49565b6103e790600a611dd2565b9050610415565b816103fa606485611dde565b60ff166104079190611c79565b61041290600a611dd2565b90505b600081828660008151811061042c5761042c611c1d565b602002602001015161043e9190611cda565b6104489190611cbb565b90508460008151811061045d5761045d611c1d565b6020026020010151811015610479576104768282611c79565b90505b600082838760018151811061049057610490611c1d565b60200260200101516104a29190611cda565b6104ac9190611cbb565b90506000836104bb8484611c49565b6104c59190611c79565b905080848a60c001516104d89190611cbb565b6104e29190611ca7565b6104ec9084611c79565b60208c0181905260a08a01516101008b015160e08c01516127109363ffffffff9093169261051a9190611cbb565b6105249190611cda565b61052e9190611cbb565b6105389190611cda565b60208c0152505050505b505061074b565b85515160ff16600314156106325760008160008151811061056c5761056c611c1d565b60200260200101518260018151811061058757610587611c1d565b60200260200101516105999190611c49565b6105a4906001611c79565b9050808460c001516105b69190611ca7565b826000815181106105c9576105c9611c1d565b60200260200101516105db9190611c79565b6020870181905260a085015161010086015160e08701516127109363ffffffff909316926106099190611cbb565b6106139190611cda565b61061d9190611cbb565b6106279190611cda565b60208701525061074b565b85515160ff166002141561074b5760008160008151811061065557610655611c1d565b60200260200101518260018151811061067057610670611c1d565b60200260200101516106829190611c49565b61068d906001611c79565b9050808460c0015161069f9190611ca7565b826000815181106106b2576106b2611c1d565b60200260200101516106c49190611c79565b602087018190526080850151612710916106e39162ffffff1690611cbb565b6106ed9190611cda565b602087015260a084015161271063ffffffff9091161115610735576127108460a0015163ffffffff1687602001516107259190611cbb565b61072f9190611cda565b60208701525b603286602001511061074957603260208701525b505b509295945050505050565b61075e6112f8565b600061076983610e3a565b9050600061077684610ebc565b90508860ff1660011415610798578015610798578061079481611e00565b9150505b81156107de57818110156107d4576107b08482610f07565b8087526107bd5760001986525b6107c681611e17565b6040870181905290506108db565b60001986526108db565b60006107e985610fff565b9050806000815181106107fe576107fe611c1d565b6020026020010151600010801561084957508060018151811061082357610823611c1d565b60200260200101518160008151811061083e5761083e611c1d565b602002602001015111155b156108d9578060018151811061086157610861611c1d565b6020026020010151828260008151811061087d5761087d611c1d565b602002602001015161088f9190611c79565b116108d35781816000815181106108a8576108a8611c1d565b60200260200101516108ba9190611c79565b87526108c582611e17565b6040880181905291506108d9565b60001987525b505b5093979650505050505050565b6108f06112f8565b60006108fb84610e3a565b9050600061090885610ebc565b90508960ff166001141561092a57801561092a578061092681611e00565b9150505b81156109a05783156109515761094a6109438386611ca7565b8690610f07565b8752610b4b565b81811015610987576109638582610f07565b8088526109705760001987525b61097981611e17565b604088018190529050610b4b565b610992856000610f07565b875260006040880152610b4b565b60006109ab86610fff565b9050806000815181106109c0576109c0611c1d565b60200260200101516000108015610a0b5750806001815181106109e5576109e5611c1d565b602002602001015181600081518110610a0057610a00611c1d565b602002602001015111155b15610b49578415610a9c57600081600081518110610a2b57610a2b611c1d565b602002602001015182600181518110610a4657610a46611c1d565b6020026020010151610a589190611c49565b610a63906001611c79565b9050610a6f8187611ca7565b82600081518110610a8257610a82611c1d565b6020026020010151610a949190611c79565b895250610b49565b80600181518110610aaf57610aaf611c1d565b60200260200101518282600081518110610acb57610acb611c1d565b6020026020010151610add9190611c79565b11610b21578181600081518110610af657610af6611c1d565b6020026020010151610b089190611c79565b8852610b1382611e17565b604089018190529150610b49565b80600081518110610b3457610b34611c1d565b60209081029190910101518852600060408901525b505b509498975050505050505050565b60408051600280825260608083018452926000929190602083019080368337505084519192505060ff161580610b935750825160ff166001145b15610c19578260400151600181518110610baf57610baf611c1d565b602002602001015181600081518110610bca57610bca611c1d565b6020026020010181815250508260400151600281518110610bed57610bed611c1d565b602002602001015181600181518110610c0857610c08611c1d565b6020026020010181815250506101b7565b825160ff1660031415610c7b578260400151600281518110610c3d57610c3d611c1d565b602002602001015181600081518110610c5857610c58611c1d565b6020026020010181815250508260400151600381518110610bed57610bed611c1d565b825160ff16600214156101b7576000610c938461116f565b90508060ff1660021415610d70576000610cac856111e8565b90506000610cb98661123c565b604087015190915060ff8216610cd0846002611e32565b610cda9190611e32565b61ffff1681518110610cee57610cee611c1d565b602002602001015184600081518110610d0957610d09611c1d565b6020908102919091010152604086015160ff8216610d28846003611e32565b610d329190611e32565b61ffff1681518110610d4657610d46611c1d565b602002602001015184600181518110610d6157610d61611c1d565b60200260200101818152505050505b5092915050565b60006101b78260400151600081518110610d9357610d93611c1d565b6020026020010151600860ff1660006004610dae9190611e58565b610db9906004611e58565b610dc4906010611e58565b610dcf906002611e58565b610dda906004611e58565b610de5906002611e58565b610df0906002611e58565b610dfb906004611e58565b610e06906010611e58565b610e11906008611e58565b610e1c906002611e58565b610e27906010611e58565b610e32906008611e58565b60ff166112a6565b805160009060ff161580610e525750815160ff166001145b15610e5f57506000919050565b815160ff1660021480610e765750815160ff166003145b15610eb4576000610e86836112c5565b905060ff811660011415610eab576000610e9f846111e8565b61ffff16949350505050565b50600092915050565b506000919050565b805160009060ff161580610ed45750815160ff166001145b15610ee157506000919050565b8160400151600181518110610ef857610ef8611c1d565b60200260200101519050919050565b815160009060ff161580610f1f5750825160ff166001145b15610f2c575060006101b7565b825160ff1660021415610fa4576000610f44846112c5565b905060ff811660011415610f9e576000610f5d856111e8565b90508061ffff16841015610f9c576040850151610f7b856002611c79565b81518110610f8b57610f8b611c1d565b6020026020010151925050506101b7565b505b50610eab565b825160ff1660031415610eab576000610fbc846112c5565b905060ff811660011415610ff5576000610fd5856111e8565b90508061ffff16841015610ff3576040850151610f7b856004611c79565b505b5050600092915050565b6040805160028082526060808301845292600092919060208301908036833701905050835190915060ff16600214156110ca57600061103d846112c5565b905060ff81166110c457836040015160028151811061105e5761105e611c1d565b60200260200101518260008151811061107957611079611c1d565b602002602001018181525050836040015160038151811061109c5761109c611c1d565b6020026020010151826001815181106110b7576110b7611c1d565b6020026020010181815250505b506101b7565b825160ff16600314156101b75760006110e2846112c5565b905060ff8116610d7057836040015160048151811061110357611103611c1d565b60200260200101518260008151811061111e5761111e611c1d565b602002602001018181525050836040015160058151811061114157611141611c1d565b60200260200101518260018151811061115c5761115c611c1d565b6020026020010181815250505092915050565b805160009060ff16600214156111e0576101b7826040015160008151811061119957611199611c1d565b6020026020010151600260ff16600060046111b49190611e58565b6111bf906004611e58565b6111ca906010611e58565b6111d5906002611e58565b610e32906004611e58565b506002919050565b805160009060ff16600214806112025750815160ff166003145b15610eb4576101b7826040015160008151811061122157611221611c1d565b6020026020010151601060ff16600060046111d59190611e58565b805160009060ff16600214806112565750815160ff166003145b15610eb4576101b7826040015160008151811061127557611275611c1d565b6020026020010151600260ff16600060046112909190611e58565b61129b906004611e58565b610e32906010611e58565b91821c916000806112ba600180861b611c49565b909416949350505050565b60006101b782604001516000815181106112e1576112e1611c1d565b6020026020010151600460ff16600060ff166112a6565b60405180606001604052806000815260200160008152602001600081525090565b803560ff8116811461132a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156113675761136761132f565b60405290565b604080519081016001600160401b03811182821017156113675761136761132f565b604051608081016001600160401b03811182821017156113675761136761132f565b604051606081016001600160401b03811182821017156113675761136761132f565b6040516101c081016001600160401b03811182821017156113675761136761132f565b60405161018081016001600160401b03811182821017156113675761136761132f565b604051601f8201601f191681016001600160401b03811182821017156114415761144161132f565b604052919050565b80356001600160a01b038116811461132a57600080fd5b803563ffffffff8116811461132a57600080fd5b60006001600160401b0382111561148d5761148d61132f565b5060051b60200190565b600082601f8301126114a857600080fd5b813560206114bd6114b883611474565b611419565b82815260059290921b840181019181810190868411156114dc57600080fd5b8286015b8481101561161a5780356001600160401b03808211156114ff57600080fd5b9088019060a0828b03601f1901121561151757600080fd5b61151f611345565b61152a878401611319565b81526040611539818501611449565b888301526060840135818301526080840135606083015260a0840135838111156115635760008081fd5b8085019450508b603f85011261157b57600092508283fd5b87840135925061158d6114b884611474565b83815260069390931b8401810192888101908d8511156115ad5760008081fd5b948201945b848610156116045782868f0312156115ca5760008081fd5b6115d261136d565b6115db87611460565b81528a8701358060040b81146115f15760008081fd5b818c0152825294820194908901906115b2565b60808401525050855250509183019183016114e0565b509695505050505050565b60006001600160401b0383111561163e5761163e61132f565b611651601f8401601f1916602001611419565b905082815283838301111561166557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261168d57600080fd5b61169c83833560208501611625565b9392505050565b600082601f8301126116b457600080fd5b813560206116c46114b883611474565b82815260059290921b840181019181810190868411156116e357600080fd5b8286015b8481101561161a57803583529183019183016116e7565b600082601f83011261170f57600080fd5b8135602061171f6114b883611474565b82815260059290921b8401810191818101908684111561173e57600080fd5b8286015b8481101561161a5761175381611449565b8352918301918301611742565b60006080828403121561177257600080fd5b61177a61138f565b905081356001600160401b038082111561179357600080fd5b90830190606082860312156117a757600080fd5b6117af6113b1565b6117b883611319565b81526117c660208401611449565b60208201526040830135828111156117dd57600080fd5b6117e9878286016116a3565b60408301525083526117fd60208501611319565b6020840152604084013591508082111561181657600080fd5b611822858386016116fe565b6040840152606084013591508082111561183b57600080fd5b50611848848285016116a3565b60608301525092915050565b803562ffffff8116811461132a57600080fd5b600082601f83011261187857600080fd5b813560206118886114b883611474565b82815260059290921b840181019181810190868411156118a757600080fd5b8286015b8481101561161a576118bc81611319565b83529183019183016118ab565b60006101c082840312156118dc57600080fd5b6118e46113d3565b90506118ef82611319565b81526118fd60208301611319565b602082015261190e60408301611319565b604082015261191f60608301611319565b606082015261193060808301611854565b608082015261194160a08301611460565b60a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120611974818401611319565b90820152610140828101356001600160401b038082111561199457600080fd5b6119a0868387016116a3565b838501526101609250828501359150808211156119bc57600080fd5b6119c8868387016116a3565b838501526101809250828501359150808211156119e457600080fd5b6119f086838701611867565b838501526101a0925082850135915080821115611a0c57600080fd5b50611a19858286016116fe565b82840152505092915050565b600080600080600060a08688031215611a3d57600080fd5b611a4686611319565b945060208601356001600160401b0380821115611a6257600080fd5b90870190610180828a031215611a7757600080fd5b611a7f6113f6565b611a8883611449565b8152611a9660208401611449565b6020820152611aa760408401611449565b6040820152611ab860608401611449565b60608201526080830135608082015260a083013560a0820152611add60c08401611460565b60c0820152611aee60e08401611460565b60e0820152610100611b01818501611460565b90820152610120611b13848201611319565b908201526101408381013583811115611b2b57600080fd5b611b378c828701611497565b8284015250506101608084013583811115611b5157600080fd5b611b5d8c82870161167c565b82840152505080965050611b7360408901611319565b94506060880135915080821115611b8957600080fd5b611b9589838a01611760565b93506080880135915080821115611bab57600080fd5b50611bb8888289016118c9565b9150509295509295909350565b60008060408385031215611bd857600080fd5b82356001600160401b03811115611bee57600080fd5b8301601f81018513611bff57600080fd5b611c0e85823560208401611625565b95602094909401359450505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611c5b57611c5b611c33565b500390565b600060208284031215611c7257600080fd5b5051919050565b60008219821115611c8c57611c8c611c33565b500190565b634e487b7160e01b600052601260045260246000fd5b600082611cb657611cb6611c91565b500690565b6000816000190483118215151615611cd557611cd5611c33565b500290565b600082611ce957611ce9611c91565b500490565b600181815b80851115611d29578160001904821115611d0f57611d0f611c33565b80851615611d1c57918102915b93841c9390800290611cf3565b509250929050565b600082611d40575060016101b7565b81611d4d575060006101b7565b8160018114611d635760028114611d6d57611d89565b60019150506101b7565b60ff841115611d7e57611d7e611c33565b50506001821b6101b7565b5060208310610133831016604e8410600b8410161715611dac575081810a6101b7565b611db68383611cee565b8060001904821115611dca57611dca611c33565b029392505050565b600061169c8383611d31565b600060ff831680611df157611df1611c91565b8060ff84160691505092915050565b600081611e0f57611e0f611c33565b506000190190565b6000600019821415611e2b57611e2b611c33565b5060010190565b600061ffff808316818516808303821115611e4f57611e4f611c33565b01949350505050565b600060ff821660ff84168060ff03821115611e7557611e75611c33565b01939250505056fea26469706673582212202a835dce3c3c825f8027494a9d917da3bed67efe4ec30a161a32d4a435e655ca64736f6c63430008080033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80631231db5314610045578063e34796531461007f575b600080fd5b610058610053366004611a25565b6100ad565b60408051825181526020808401519082015291810151908201526060015b60405180910390f35b81801561008b57600080fd5b5061009f61009a366004611bc5565b610184565b604051908152602001610076565b6100b56112f8565b6100bd6112f8565b6100ce8585838760000151876101bd565b9050600083610120015160ff161180156100f2575082610120015160ff168560ff16105b15610123578261014001518560ff168151811061011157610111611c1d565b6020908102919091010151815261017a565b83515160ff166002141561014e576101478787856040015184898960000151610756565b905061017a565b83515160ff166003141561017a5761017787878560400151848989600001518960c001516108e8565b90505b9695505050505050565b600081610193576301312d0091505b60005a6101a09084611c49565b90506301312d008310156101b2575a92505b829150505b92915050565b6101c56112f8565b60006101d48660000151610b59565b9050600083610120015160ff161180156101f8575082610120015160ff168760ff16105b1561022d578261016001518760ff168151811061021757610217611c1d565b602002602001015185602001818152505061074b565b85515160ff161580610244575085515160ff166001145b1561054957600061025485610d77565b87515190915060129060ff16600114156103bb5785602001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156102a557600080fd5b505afa9250505080156102d5575060408051601f3d908101601f191682019092526102d291810190611c60565b60015b6103b857600090506000836000815181106102f2576102f2611c1d565b60200260200101518460018151811061030d5761030d611c1d565b602002602001015161031f9190611c49565b61032a906001611c79565b9050808660c0015161033c9190611ca7565b8460008151811061034f5761034f611c1d565b60200260200101516103619190611c79565b6020890181905260a087015161010088015160e08901516127109363ffffffff9093169261038f9190611cbb565b6103999190611cda565b6103a39190611cbb565b6103ad9190611cda565b6020890152506103bb565b90505b801561054257600060648360ff1610156103ee576103dc60ff841683611c49565b6103e790600a611dd2565b9050610415565b816103fa606485611dde565b60ff166104079190611c79565b61041290600a611dd2565b90505b600081828660008151811061042c5761042c611c1d565b602002602001015161043e9190611cda565b6104489190611cbb565b90508460008151811061045d5761045d611c1d565b6020026020010151811015610479576104768282611c79565b90505b600082838760018151811061049057610490611c1d565b60200260200101516104a29190611cda565b6104ac9190611cbb565b90506000836104bb8484611c49565b6104c59190611c79565b905080848a60c001516104d89190611cbb565b6104e29190611ca7565b6104ec9084611c79565b60208c0181905260a08a01516101008b015160e08c01516127109363ffffffff9093169261051a9190611cbb565b6105249190611cda565b61052e9190611cbb565b6105389190611cda565b60208c0152505050505b505061074b565b85515160ff16600314156106325760008160008151811061056c5761056c611c1d565b60200260200101518260018151811061058757610587611c1d565b60200260200101516105999190611c49565b6105a4906001611c79565b9050808460c001516105b69190611ca7565b826000815181106105c9576105c9611c1d565b60200260200101516105db9190611c79565b6020870181905260a085015161010086015160e08701516127109363ffffffff909316926106099190611cbb565b6106139190611cda565b61061d9190611cbb565b6106279190611cda565b60208701525061074b565b85515160ff166002141561074b5760008160008151811061065557610655611c1d565b60200260200101518260018151811061067057610670611c1d565b60200260200101516106829190611c49565b61068d906001611c79565b9050808460c0015161069f9190611ca7565b826000815181106106b2576106b2611c1d565b60200260200101516106c49190611c79565b602087018190526080850151612710916106e39162ffffff1690611cbb565b6106ed9190611cda565b602087015260a084015161271063ffffffff9091161115610735576127108460a0015163ffffffff1687602001516107259190611cbb565b61072f9190611cda565b60208701525b603286602001511061074957603260208701525b505b509295945050505050565b61075e6112f8565b600061076983610e3a565b9050600061077684610ebc565b90508860ff1660011415610798578015610798578061079481611e00565b9150505b81156107de57818110156107d4576107b08482610f07565b8087526107bd5760001986525b6107c681611e17565b6040870181905290506108db565b60001986526108db565b60006107e985610fff565b9050806000815181106107fe576107fe611c1d565b6020026020010151600010801561084957508060018151811061082357610823611c1d565b60200260200101518160008151811061083e5761083e611c1d565b602002602001015111155b156108d9578060018151811061086157610861611c1d565b6020026020010151828260008151811061087d5761087d611c1d565b602002602001015161088f9190611c79565b116108d35781816000815181106108a8576108a8611c1d565b60200260200101516108ba9190611c79565b87526108c582611e17565b6040880181905291506108d9565b60001987525b505b5093979650505050505050565b6108f06112f8565b60006108fb84610e3a565b9050600061090885610ebc565b90508960ff166001141561092a57801561092a578061092681611e00565b9150505b81156109a05783156109515761094a6109438386611ca7565b8690610f07565b8752610b4b565b81811015610987576109638582610f07565b8088526109705760001987525b61097981611e17565b604088018190529050610b4b565b610992856000610f07565b875260006040880152610b4b565b60006109ab86610fff565b9050806000815181106109c0576109c0611c1d565b60200260200101516000108015610a0b5750806001815181106109e5576109e5611c1d565b602002602001015181600081518110610a0057610a00611c1d565b602002602001015111155b15610b49578415610a9c57600081600081518110610a2b57610a2b611c1d565b602002602001015182600181518110610a4657610a46611c1d565b6020026020010151610a589190611c49565b610a63906001611c79565b9050610a6f8187611ca7565b82600081518110610a8257610a82611c1d565b6020026020010151610a949190611c79565b895250610b49565b80600181518110610aaf57610aaf611c1d565b60200260200101518282600081518110610acb57610acb611c1d565b6020026020010151610add9190611c79565b11610b21578181600081518110610af657610af6611c1d565b6020026020010151610b089190611c79565b8852610b1382611e17565b604089018190529150610b49565b80600081518110610b3457610b34611c1d565b60209081029190910101518852600060408901525b505b509498975050505050505050565b60408051600280825260608083018452926000929190602083019080368337505084519192505060ff161580610b935750825160ff166001145b15610c19578260400151600181518110610baf57610baf611c1d565b602002602001015181600081518110610bca57610bca611c1d565b6020026020010181815250508260400151600281518110610bed57610bed611c1d565b602002602001015181600181518110610c0857610c08611c1d565b6020026020010181815250506101b7565b825160ff1660031415610c7b578260400151600281518110610c3d57610c3d611c1d565b602002602001015181600081518110610c5857610c58611c1d565b6020026020010181815250508260400151600381518110610bed57610bed611c1d565b825160ff16600214156101b7576000610c938461116f565b90508060ff1660021415610d70576000610cac856111e8565b90506000610cb98661123c565b604087015190915060ff8216610cd0846002611e32565b610cda9190611e32565b61ffff1681518110610cee57610cee611c1d565b602002602001015184600081518110610d0957610d09611c1d565b6020908102919091010152604086015160ff8216610d28846003611e32565b610d329190611e32565b61ffff1681518110610d4657610d46611c1d565b602002602001015184600181518110610d6157610d61611c1d565b60200260200101818152505050505b5092915050565b60006101b78260400151600081518110610d9357610d93611c1d565b6020026020010151600860ff1660006004610dae9190611e58565b610db9906004611e58565b610dc4906010611e58565b610dcf906002611e58565b610dda906004611e58565b610de5906002611e58565b610df0906002611e58565b610dfb906004611e58565b610e06906010611e58565b610e11906008611e58565b610e1c906002611e58565b610e27906010611e58565b610e32906008611e58565b60ff166112a6565b805160009060ff161580610e525750815160ff166001145b15610e5f57506000919050565b815160ff1660021480610e765750815160ff166003145b15610eb4576000610e86836112c5565b905060ff811660011415610eab576000610e9f846111e8565b61ffff16949350505050565b50600092915050565b506000919050565b805160009060ff161580610ed45750815160ff166001145b15610ee157506000919050565b8160400151600181518110610ef857610ef8611c1d565b60200260200101519050919050565b815160009060ff161580610f1f5750825160ff166001145b15610f2c575060006101b7565b825160ff1660021415610fa4576000610f44846112c5565b905060ff811660011415610f9e576000610f5d856111e8565b90508061ffff16841015610f9c576040850151610f7b856002611c79565b81518110610f8b57610f8b611c1d565b6020026020010151925050506101b7565b505b50610eab565b825160ff1660031415610eab576000610fbc846112c5565b905060ff811660011415610ff5576000610fd5856111e8565b90508061ffff16841015610ff3576040850151610f7b856004611c79565b505b5050600092915050565b6040805160028082526060808301845292600092919060208301908036833701905050835190915060ff16600214156110ca57600061103d846112c5565b905060ff81166110c457836040015160028151811061105e5761105e611c1d565b60200260200101518260008151811061107957611079611c1d565b602002602001018181525050836040015160038151811061109c5761109c611c1d565b6020026020010151826001815181106110b7576110b7611c1d565b6020026020010181815250505b506101b7565b825160ff16600314156101b75760006110e2846112c5565b905060ff8116610d7057836040015160048151811061110357611103611c1d565b60200260200101518260008151811061111e5761111e611c1d565b602002602001018181525050836040015160058151811061114157611141611c1d565b60200260200101518260018151811061115c5761115c611c1d565b6020026020010181815250505092915050565b805160009060ff16600214156111e0576101b7826040015160008151811061119957611199611c1d565b6020026020010151600260ff16600060046111b49190611e58565b6111bf906004611e58565b6111ca906010611e58565b6111d5906002611e58565b610e32906004611e58565b506002919050565b805160009060ff16600214806112025750815160ff166003145b15610eb4576101b7826040015160008151811061122157611221611c1d565b6020026020010151601060ff16600060046111d59190611e58565b805160009060ff16600214806112565750815160ff166003145b15610eb4576101b7826040015160008151811061127557611275611c1d565b6020026020010151600260ff16600060046112909190611e58565b61129b906004611e58565b610e32906010611e58565b91821c916000806112ba600180861b611c49565b909416949350505050565b60006101b782604001516000815181106112e1576112e1611c1d565b6020026020010151600460ff16600060ff166112a6565b60405180606001604052806000815260200160008152602001600081525090565b803560ff8116811461132a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156113675761136761132f565b60405290565b604080519081016001600160401b03811182821017156113675761136761132f565b604051608081016001600160401b03811182821017156113675761136761132f565b604051606081016001600160401b03811182821017156113675761136761132f565b6040516101c081016001600160401b03811182821017156113675761136761132f565b60405161018081016001600160401b03811182821017156113675761136761132f565b604051601f8201601f191681016001600160401b03811182821017156114415761144161132f565b604052919050565b80356001600160a01b038116811461132a57600080fd5b803563ffffffff8116811461132a57600080fd5b60006001600160401b0382111561148d5761148d61132f565b5060051b60200190565b600082601f8301126114a857600080fd5b813560206114bd6114b883611474565b611419565b82815260059290921b840181019181810190868411156114dc57600080fd5b8286015b8481101561161a5780356001600160401b03808211156114ff57600080fd5b9088019060a0828b03601f1901121561151757600080fd5b61151f611345565b61152a878401611319565b81526040611539818501611449565b888301526060840135818301526080840135606083015260a0840135838111156115635760008081fd5b8085019450508b603f85011261157b57600092508283fd5b87840135925061158d6114b884611474565b83815260069390931b8401810192888101908d8511156115ad5760008081fd5b948201945b848610156116045782868f0312156115ca5760008081fd5b6115d261136d565b6115db87611460565b81528a8701358060040b81146115f15760008081fd5b818c0152825294820194908901906115b2565b60808401525050855250509183019183016114e0565b509695505050505050565b60006001600160401b0383111561163e5761163e61132f565b611651601f8401601f1916602001611419565b905082815283838301111561166557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261168d57600080fd5b61169c83833560208501611625565b9392505050565b600082601f8301126116b457600080fd5b813560206116c46114b883611474565b82815260059290921b840181019181810190868411156116e357600080fd5b8286015b8481101561161a57803583529183019183016116e7565b600082601f83011261170f57600080fd5b8135602061171f6114b883611474565b82815260059290921b8401810191818101908684111561173e57600080fd5b8286015b8481101561161a5761175381611449565b8352918301918301611742565b60006080828403121561177257600080fd5b61177a61138f565b905081356001600160401b038082111561179357600080fd5b90830190606082860312156117a757600080fd5b6117af6113b1565b6117b883611319565b81526117c660208401611449565b60208201526040830135828111156117dd57600080fd5b6117e9878286016116a3565b60408301525083526117fd60208501611319565b6020840152604084013591508082111561181657600080fd5b611822858386016116fe565b6040840152606084013591508082111561183b57600080fd5b50611848848285016116a3565b60608301525092915050565b803562ffffff8116811461132a57600080fd5b600082601f83011261187857600080fd5b813560206118886114b883611474565b82815260059290921b840181019181810190868411156118a757600080fd5b8286015b8481101561161a576118bc81611319565b83529183019183016118ab565b60006101c082840312156118dc57600080fd5b6118e46113d3565b90506118ef82611319565b81526118fd60208301611319565b602082015261190e60408301611319565b604082015261191f60608301611319565b606082015261193060808301611854565b608082015261194160a08301611460565b60a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120611974818401611319565b90820152610140828101356001600160401b038082111561199457600080fd5b6119a0868387016116a3565b838501526101609250828501359150808211156119bc57600080fd5b6119c8868387016116a3565b838501526101809250828501359150808211156119e457600080fd5b6119f086838701611867565b838501526101a0925082850135915080821115611a0c57600080fd5b50611a19858286016116fe565b82840152505092915050565b600080600080600060a08688031215611a3d57600080fd5b611a4686611319565b945060208601356001600160401b0380821115611a6257600080fd5b90870190610180828a031215611a7757600080fd5b611a7f6113f6565b611a8883611449565b8152611a9660208401611449565b6020820152611aa760408401611449565b6040820152611ab860608401611449565b60608201526080830135608082015260a083013560a0820152611add60c08401611460565b60c0820152611aee60e08401611460565b60e0820152610100611b01818501611460565b90820152610120611b13848201611319565b908201526101408381013583811115611b2b57600080fd5b611b378c828701611497565b8284015250506101608084013583811115611b5157600080fd5b611b5d8c82870161167c565b82840152505080965050611b7360408901611319565b94506060880135915080821115611b8957600080fd5b611b9589838a01611760565b93506080880135915080821115611bab57600080fd5b50611bb8888289016118c9565b9150509295509295909350565b60008060408385031215611bd857600080fd5b82356001600160401b03811115611bee57600080fd5b8301601f81018513611bff57600080fd5b611c0e85823560208401611625565b95602094909401359450505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611c5b57611c5b611c33565b500390565b600060208284031215611c7257600080fd5b5051919050565b60008219821115611c8c57611c8c611c33565b500190565b634e487b7160e01b600052601260045260246000fd5b600082611cb657611cb6611c91565b500690565b6000816000190483118215151615611cd557611cd5611c33565b500290565b600082611ce957611ce9611c91565b500490565b600181815b80851115611d29578160001904821115611d0f57611d0f611c33565b80851615611d1c57918102915b93841c9390800290611cf3565b509250929050565b600082611d40575060016101b7565b81611d4d575060006101b7565b8160018114611d635760028114611d6d57611d89565b60019150506101b7565b60ff841115611d7e57611d7e611c33565b50506001821b6101b7565b5060208310610133831016604e8410600b8410161715611dac575081810a6101b7565b611db68383611cee565b8060001904821115611dca57611dca611c33565b029392505050565b600061169c8383611d31565b600060ff831680611df157611df1611c91565b8060ff84160691505092915050565b600081611e0f57611e0f611c33565b506000190190565b6000600019821415611e2b57611e2b611c33565b5060010190565b600061ffff808316818516808303821115611e4f57611e4f611c33565b01949350505050565b600060ff821660ff84168060ff03821115611e7557611e75611c33565b01939250505056fea26469706673582212202a835dce3c3c825f8027494a9d917da3bed67efe4ec30a161a32d4a435e655ca64736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
