{
  "_format": "hh-sol-artifact-1",
  "contractName": "AllocateLayerAlgorithm",
  "sourceName": "contracts/V3/handler/AllocateLayerAlgorithm.sol",
  "abi": [
    {
      "inputs": [
        {
          "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": "stdTokenSlotList",
          "type": "tuple[]"
        },
        {
          "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": "uint16",
          "name": "roundCount",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "round",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenSlotIndex",
          "type": "uint256"
        }
      ],
      "name": "calAllocateTokenId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506112dc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063949ec16214610030575b600080fd5b61004361003e366004610f80565b61005c565b6040805192835260208301919091520160405180910390f35b60008060008561ffff16875161007291906111d5565b9050600061008082876111f7565b61008a9086611216565b90508181106100a25760016000935093505050610134565b60008886815181106100b6576100b661122d565b602002602001015190506000806100ea8c85815181106100d8576100d861122d565b6020026020010151600001518461013e565b90925090506000806101048e8e8e8e61003e8f6001611243565b909250905061011382846111f7565b8161011e84876111f7565b6101289190611243565b98509850505050505050505b9550959350505050565b6000806000806001905084602001516001600160a01b031686602001516001600160a01b03161480156101835750845160ff16600214806101835750845160ff166003145b156104225760006101938761042f565b905060006101a088610474565b9050801561023e5760408701516101cb5760006101be826001611243565b9550955050505050610428565b60006101e488604001518a6104f690919063ffffffff16565b905060008112156101fe5750929450909250610428915050565b60ff83166001141561021557809450819350610238565b60ff831661023857610228816001611243565b9450610235826001611243565b93505b5061041f565b6000610249896108f5565b90508060008151811061025e5761025e61122d565b602002602001015160001080156102a95750806001815181106102835761028361122d565b60200260200101518160008151811061029e5761029e61122d565b602002602001015111155b1561041d57604088015161030d5760009450806000815181106102ce576102ce61122d565b6020026020010151816001815181106102e9576102e961122d565b60200260200101516102fb9190611216565b610306906002611243565b935061041d565b60ff831660011415610390578060008151811061032c5761032c61122d565b602002602001015188604001516103439190611216565b9450806000815181106103585761035861122d565b6020026020010151816001815181106103735761037361122d565b60200260200101516103859190611216565b610306906001611243565b60ff831661041d57806000815181106103ab576103ab61122d565b602002602001015188604001516103c29190611216565b6103cd906001611243565b9450806000815181106103e2576103e261122d565b6020026020010151816001815181106103fd576103fd61122d565b602002602001015161040f9190611216565b61041a906002611243565b93505b505b50505b90925090505b9250929050565b600061046e826040015160008151811061044b5761044b61122d565b6020026020010151600460ff1660006004610466919061125b565b60ff16610a66565b92915050565b805160009060ff16158061048c5750815160ff166001145b1561049957506000919050565b815160ff16600214806104b05750815160ff166003145b156104ee5760006104c083610a87565b905060ff8116600114156104e55760006104d984610aba565b61ffff16949350505050565b50600092915050565b506000919050565b815160009060ff16158061050e5750825160ff166001145b1561051c575060001961046e565b825160ff166003141561077657600061053484610a87565b905060ff81166001141561076b57600061054d85610aba565b9050600085604001516000815181106105685761056861122d565b602002602001015190506000866040015160018151811061058b5761058b61122d565b60200260200101519050600087604001516002815181106105ae576105ae61122d565b60200260200101519050600088604001516003815181106105d1576105d161122d565b60200260200101519050600089604001516000815181106105f4576105f461122d565b602002602001018181525050600089604001516001815181106106195761061961122d565b6020026020010181815250506000896040015160028151811061063e5761063e61122d565b602002602001018181525050600089604001516003815181106106635761066361122d565b60200260200101818152505060006106908a604001518760046106869190611280565b61ffff168b610b19565b9050848a604001516000815181106106aa576106aa61122d565b602002602001018181525050838a604001516001815181106106ce576106ce61122d565b602002602001018181525050828a604001516002815181106106f2576106f261122d565b602002602001018181525050818a604001516003815181106107165761071661122d565b60200260200101818152505060006000199050898b6040015183815181106107405761074061122d565b6020026020010151141561075c57610759600483611216565b90505b975061046e9650505050505050565b60001991505061046e565b825160ff16600214156108eb57600061078e84610a87565b905060ff81166001141561076b5760006107a785610aba565b9050600085604001516000815181106107c2576107c261122d565b60200260200101519050600086604001516001815181106107e5576107e561122d565b60200260200101519050600087604001516000815181106108085761080861122d565b6020026020010181815250506000876040015160018151811061082d5761082d61122d565b602002602001018181525050600061085a88604001518560026108509190611280565b61ffff1689610b19565b90508288604001516000815181106108745761087461122d565b6020026020010181815250508188604001516001815181106108985761089861122d565b6020026020010181815250506000600019905087896040015183815181106108c2576108c261122d565b602002602001015114156108de576108db600483611216565b90505b955061046e945050505050565b5060001992915050565b6040805160028082526060808301845292600092919060208301908036833701905050835190915060ff16600214156109c057600061093384610a87565b905060ff81166109ba5783604001516002815181106109545761095461122d565b60200260200101518260008151811061096f5761096f61122d565b60200260200101818152505083604001516003815181106109925761099261122d565b6020026020010151826001815181106109ad576109ad61122d565b6020026020010181815250505b5061046e565b825160ff166003141561046e5760006109d884610a87565b905060ff8116610a5f5783604001516004815181106109f9576109f961122d565b602002602001015182600081518110610a1457610a1461122d565b6020026020010181815250508360400151600581518110610a3757610a3761122d565b602002602001015182600181518110610a5257610a5261122d565b6020026020010181815250505b5092915050565b91821c91600080610a7a600180861b611216565b85169150505b9392505050565b600061046e8260400151600081518110610aa357610aa361122d565b6020026020010151600460ff16600060ff16610a66565b805160009060ff1660021480610ad45750815160ff166003145b156104ee5761046e8260400151600081518110610af357610af361122d565b6020026020010151601060ff1660006004610b0e919061125b565b61046690600461125b565b6000835160001415610b2d57506000610a80565b6000835b80821015610b84576000610b458383610bd7565b905084878281518110610b5a57610b5a61122d565b60200260200101511115610b7057809150610b7e565b610b7b816001611243565b92505b50610b31565b600082118015610bb657508386610b9c600185611216565b81518110610bac57610bac61122d565b6020026020010151145b15610bcf57610bc6600183611216565b92505050610a80565b509050610a80565b6000610be660028484186111d5565b610a8090848416611243565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610c2a57610c2a610bf2565b60405290565b604080519081016001600160401b0381118282101715610c2a57610c2a610bf2565b604051608081016001600160401b0381118282101715610c2a57610c2a610bf2565b604051606081016001600160401b0381118282101715610c2a57610c2a610bf2565b604051601f8201601f191681016001600160401b0381118282101715610cbe57610cbe610bf2565b604052919050565b60006001600160401b03821115610cdf57610cdf610bf2565b5060051b60200190565b803560ff81168114610cfa57600080fd5b919050565b80356001600160a01b0381168114610cfa57600080fd5b600082601f830112610d2757600080fd5b81356020610d3c610d3783610cc6565b610c96565b82815260059290921b84018101918181019086841115610d5b57600080fd5b8286015b84811015610d765780358352918301918301610d5f565b509695505050505050565b600082601f830112610d9257600080fd5b81356020610da2610d3783610cc6565b82815260059290921b84018101918181019086841115610dc157600080fd5b8286015b84811015610d7657610dd681610cff565b8352918301918301610dc5565b600082601f830112610df457600080fd5b81356020610e04610d3783610cc6565b82815260059290921b84018101918181019086841115610e2357600080fd5b8286015b84811015610d765780356001600160401b0380821115610e4657600080fd5b9088019060a0828b03601f19011215610e5e57600080fd5b610e66610c08565b610e71878401610ce9565b81526040610e80818501610cff565b888301526060840135818301526080840135606083015260a084013583811115610eaa5760008081fd5b8085019450508b603f850112610ec257600092508283fd5b878401359250610ed4610d3784610cc6565b83815260069390931b8401810192888101908d851115610ef45760008081fd5b948201945b84861015610f585782868f031215610f115760008081fd5b610f19610c30565b863563ffffffff81168114610f2e5760008081fd5b8152868b0135600481900b8114610f455760008081fd5b818c015282529482019490890190610ef9565b6080840152505085525050918301918301610e27565b803561ffff81168114610cfa57600080fd5b600080600080600060a08688031215610f9857600080fd5b6001600160401b0386351115610fad57600080fd5b86601f873588010112610fbf57600080fd5b610fcf610d378735880135610cc6565b8635870180358083526020808401939260059290921b90910101891015610ff557600080fd5b602088358901015b88358901803560051b0160200181101561116d576001600160401b038135111561102657600080fd5b88358901813501601f196080828d038201121561104257600080fd5b61104a610c52565b6001600160401b036020840135111561106257600080fd5b606082602085013585018f0301121561107a57600080fd5b611082610c74565b9150611095602080850135850101610ce9565b82526110a960406020850135850101610cff565b60208301526001600160401b03606060208501358501013511156110cc57600080fd5b6110e48d602085810135860160608101350101610d16565b60408301528181526110f860408401610ce9565b60208201526001600160401b036060840135111561111557600080fd5b6111288d60206060860135860101610d81565b60408201526001600160401b036080840135111561114557600080fd5b6111588d60206080860135860101610d16565b60608201528552505060209283019201610ffd565b509550506001600160401b036020870135111561118957600080fd5b6111998760208801358801610de3565b93506111a760408701610f6e565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052601160045260246000fd5b6000826111f257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611211576112116111bf565b500290565b600082821015611228576112286111bf565b500390565b634e487b7160e01b600052603260045260246000fd5b60008219821115611256576112566111bf565b500190565b600060ff821660ff84168060ff03821115611278576112786111bf565b019392505050565b600061ffff80831681851680830382111561129d5761129d6111bf565b0194935050505056fea2646970667358221220a5248624b39eac2269e1f7c8b1d76a63e5f06dba011e7f20220903e5541db66564736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063949ec16214610030575b600080fd5b61004361003e366004610f80565b61005c565b6040805192835260208301919091520160405180910390f35b60008060008561ffff16875161007291906111d5565b9050600061008082876111f7565b61008a9086611216565b90508181106100a25760016000935093505050610134565b60008886815181106100b6576100b661122d565b602002602001015190506000806100ea8c85815181106100d8576100d861122d565b6020026020010151600001518461013e565b90925090506000806101048e8e8e8e61003e8f6001611243565b909250905061011382846111f7565b8161011e84876111f7565b6101289190611243565b98509850505050505050505b9550959350505050565b6000806000806001905084602001516001600160a01b031686602001516001600160a01b03161480156101835750845160ff16600214806101835750845160ff166003145b156104225760006101938761042f565b905060006101a088610474565b9050801561023e5760408701516101cb5760006101be826001611243565b9550955050505050610428565b60006101e488604001518a6104f690919063ffffffff16565b905060008112156101fe5750929450909250610428915050565b60ff83166001141561021557809450819350610238565b60ff831661023857610228816001611243565b9450610235826001611243565b93505b5061041f565b6000610249896108f5565b90508060008151811061025e5761025e61122d565b602002602001015160001080156102a95750806001815181106102835761028361122d565b60200260200101518160008151811061029e5761029e61122d565b602002602001015111155b1561041d57604088015161030d5760009450806000815181106102ce576102ce61122d565b6020026020010151816001815181106102e9576102e961122d565b60200260200101516102fb9190611216565b610306906002611243565b935061041d565b60ff831660011415610390578060008151811061032c5761032c61122d565b602002602001015188604001516103439190611216565b9450806000815181106103585761035861122d565b6020026020010151816001815181106103735761037361122d565b60200260200101516103859190611216565b610306906001611243565b60ff831661041d57806000815181106103ab576103ab61122d565b602002602001015188604001516103c29190611216565b6103cd906001611243565b9450806000815181106103e2576103e261122d565b6020026020010151816001815181106103fd576103fd61122d565b602002602001015161040f9190611216565b61041a906002611243565b93505b505b50505b90925090505b9250929050565b600061046e826040015160008151811061044b5761044b61122d565b6020026020010151600460ff1660006004610466919061125b565b60ff16610a66565b92915050565b805160009060ff16158061048c5750815160ff166001145b1561049957506000919050565b815160ff16600214806104b05750815160ff166003145b156104ee5760006104c083610a87565b905060ff8116600114156104e55760006104d984610aba565b61ffff16949350505050565b50600092915050565b506000919050565b815160009060ff16158061050e5750825160ff166001145b1561051c575060001961046e565b825160ff166003141561077657600061053484610a87565b905060ff81166001141561076b57600061054d85610aba565b9050600085604001516000815181106105685761056861122d565b602002602001015190506000866040015160018151811061058b5761058b61122d565b60200260200101519050600087604001516002815181106105ae576105ae61122d565b60200260200101519050600088604001516003815181106105d1576105d161122d565b60200260200101519050600089604001516000815181106105f4576105f461122d565b602002602001018181525050600089604001516001815181106106195761061961122d565b6020026020010181815250506000896040015160028151811061063e5761063e61122d565b602002602001018181525050600089604001516003815181106106635761066361122d565b60200260200101818152505060006106908a604001518760046106869190611280565b61ffff168b610b19565b9050848a604001516000815181106106aa576106aa61122d565b602002602001018181525050838a604001516001815181106106ce576106ce61122d565b602002602001018181525050828a604001516002815181106106f2576106f261122d565b602002602001018181525050818a604001516003815181106107165761071661122d565b60200260200101818152505060006000199050898b6040015183815181106107405761074061122d565b6020026020010151141561075c57610759600483611216565b90505b975061046e9650505050505050565b60001991505061046e565b825160ff16600214156108eb57600061078e84610a87565b905060ff81166001141561076b5760006107a785610aba565b9050600085604001516000815181106107c2576107c261122d565b60200260200101519050600086604001516001815181106107e5576107e561122d565b60200260200101519050600087604001516000815181106108085761080861122d565b6020026020010181815250506000876040015160018151811061082d5761082d61122d565b602002602001018181525050600061085a88604001518560026108509190611280565b61ffff1689610b19565b90508288604001516000815181106108745761087461122d565b6020026020010181815250508188604001516001815181106108985761089861122d565b6020026020010181815250506000600019905087896040015183815181106108c2576108c261122d565b602002602001015114156108de576108db600483611216565b90505b955061046e945050505050565b5060001992915050565b6040805160028082526060808301845292600092919060208301908036833701905050835190915060ff16600214156109c057600061093384610a87565b905060ff81166109ba5783604001516002815181106109545761095461122d565b60200260200101518260008151811061096f5761096f61122d565b60200260200101818152505083604001516003815181106109925761099261122d565b6020026020010151826001815181106109ad576109ad61122d565b6020026020010181815250505b5061046e565b825160ff166003141561046e5760006109d884610a87565b905060ff8116610a5f5783604001516004815181106109f9576109f961122d565b602002602001015182600081518110610a1457610a1461122d565b6020026020010181815250508360400151600581518110610a3757610a3761122d565b602002602001015182600181518110610a5257610a5261122d565b6020026020010181815250505b5092915050565b91821c91600080610a7a600180861b611216565b85169150505b9392505050565b600061046e8260400151600081518110610aa357610aa361122d565b6020026020010151600460ff16600060ff16610a66565b805160009060ff1660021480610ad45750815160ff166003145b156104ee5761046e8260400151600081518110610af357610af361122d565b6020026020010151601060ff1660006004610b0e919061125b565b61046690600461125b565b6000835160001415610b2d57506000610a80565b6000835b80821015610b84576000610b458383610bd7565b905084878281518110610b5a57610b5a61122d565b60200260200101511115610b7057809150610b7e565b610b7b816001611243565b92505b50610b31565b600082118015610bb657508386610b9c600185611216565b81518110610bac57610bac61122d565b6020026020010151145b15610bcf57610bc6600183611216565b92505050610a80565b509050610a80565b6000610be660028484186111d5565b610a8090848416611243565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610c2a57610c2a610bf2565b60405290565b604080519081016001600160401b0381118282101715610c2a57610c2a610bf2565b604051608081016001600160401b0381118282101715610c2a57610c2a610bf2565b604051606081016001600160401b0381118282101715610c2a57610c2a610bf2565b604051601f8201601f191681016001600160401b0381118282101715610cbe57610cbe610bf2565b604052919050565b60006001600160401b03821115610cdf57610cdf610bf2565b5060051b60200190565b803560ff81168114610cfa57600080fd5b919050565b80356001600160a01b0381168114610cfa57600080fd5b600082601f830112610d2757600080fd5b81356020610d3c610d3783610cc6565b610c96565b82815260059290921b84018101918181019086841115610d5b57600080fd5b8286015b84811015610d765780358352918301918301610d5f565b509695505050505050565b600082601f830112610d9257600080fd5b81356020610da2610d3783610cc6565b82815260059290921b84018101918181019086841115610dc157600080fd5b8286015b84811015610d7657610dd681610cff565b8352918301918301610dc5565b600082601f830112610df457600080fd5b81356020610e04610d3783610cc6565b82815260059290921b84018101918181019086841115610e2357600080fd5b8286015b84811015610d765780356001600160401b0380821115610e4657600080fd5b9088019060a0828b03601f19011215610e5e57600080fd5b610e66610c08565b610e71878401610ce9565b81526040610e80818501610cff565b888301526060840135818301526080840135606083015260a084013583811115610eaa5760008081fd5b8085019450508b603f850112610ec257600092508283fd5b878401359250610ed4610d3784610cc6565b83815260069390931b8401810192888101908d851115610ef45760008081fd5b948201945b84861015610f585782868f031215610f115760008081fd5b610f19610c30565b863563ffffffff81168114610f2e5760008081fd5b8152868b0135600481900b8114610f455760008081fd5b818c015282529482019490890190610ef9565b6080840152505085525050918301918301610e27565b803561ffff81168114610cfa57600080fd5b600080600080600060a08688031215610f9857600080fd5b6001600160401b0386351115610fad57600080fd5b86601f873588010112610fbf57600080fd5b610fcf610d378735880135610cc6565b8635870180358083526020808401939260059290921b90910101891015610ff557600080fd5b602088358901015b88358901803560051b0160200181101561116d576001600160401b038135111561102657600080fd5b88358901813501601f196080828d038201121561104257600080fd5b61104a610c52565b6001600160401b036020840135111561106257600080fd5b606082602085013585018f0301121561107a57600080fd5b611082610c74565b9150611095602080850135850101610ce9565b82526110a960406020850135850101610cff565b60208301526001600160401b03606060208501358501013511156110cc57600080fd5b6110e48d602085810135860160608101350101610d16565b60408301528181526110f860408401610ce9565b60208201526001600160401b036060840135111561111557600080fd5b6111288d60206060860135860101610d81565b60408201526001600160401b036080840135111561114557600080fd5b6111588d60206080860135860101610d16565b60608201528552505060209283019201610ffd565b509550506001600160401b036020870135111561118957600080fd5b6111998760208801358801610de3565b93506111a760408701610f6e565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052601160045260246000fd5b6000826111f257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611211576112116111bf565b500290565b600082821015611228576112286111bf565b500390565b634e487b7160e01b600052603260045260246000fd5b60008219821115611256576112566111bf565b500190565b600060ff821660ff84168060ff03821115611278576112786111bf565b019392505050565b600061ffff80831681851680830382111561129d5761129d6111bf565b0194935050505056fea2646970667358221220a5248624b39eac2269e1f7c8b1d76a63e5f06dba011e7f20220903e5541db66564736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
