{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestProxy",
  "sourceName": "contracts/test/TestProxy.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_crossChainLayer",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "message",
          "type": "string"
        }
      ],
      "name": "MockError",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "attachedFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requiredFee",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughProtocolFee",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "attachedValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requiredValue",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyCrossChainLayer",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "shardsKey",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "tvmCaller",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "Invoke",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "shardsKey",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "tvmCaller",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "evmAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct TokenAmount[]",
          "name": "receivedTokens",
          "type": "tuple[]"
        }
      ],
      "name": "InvokeWithCallback",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint64",
              "name": "shardsKey",
              "type": "uint64"
            },
            {
              "internalType": "string",
              "name": "tvmTarget",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "tvmPayload",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "tvmProtocolFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tvmExecutorFee",
              "type": "uint256"
            },
            {
              "internalType": "string[]",
              "name": "tvmValidExecutors",
              "type": "string[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "evmAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct TokenAmount[]",
              "name": "toBridge",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "evmAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct NFTAmount[]",
              "name": "toBridgeNFT",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct OutMessageV1",
          "name": "outMessage",
          "type": "tuple"
        }
      ],
      "name": "bridgeTokensToTON",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "emptyFunction",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "tacHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "arguments",
          "type": "bytes"
        }
      ],
      "name": "invoke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "tacHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "arguments",
          "type": "bytes"
        }
      ],
      "name": "invokeWithCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "arguments",
          "type": "bytes"
        }
      ],
      "name": "mockWithCustomError",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "arguments",
          "type": "bytes"
        }
      ],
      "name": "mockWithDefaultError",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "tacHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "arguments",
          "type": "bytes"
        }
      ],
      "name": "receiveNFT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "header",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "arguments",
          "type": "bytes"
        }
      ],
      "name": "sendMultiplyCallbackToCrossChainLayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a060405234801561001057600080fd5b50604051611a65380380611a6583398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516119b06100b5600039600081816103910152818161058c015281816107fd01528181610a6d01528181610c3d01528181610d120152610d9901526119b06000f3fe60806040526004361061009f5760003560e01c80632096525511610064578063209652551461019b578063302b86b0146101b05780633d2cfad2146101d057806350e9c31b146101f0578063bcb2606c14610210578063e77d74b01461023157600080fd5b806220cb2d146100de5780630d8e6e2c146100f3578063145769f51461011657806314c68a7314610136578063150b7a021461015657600080fd5b366100d9576040513481527f49b4c3f4344f33413322c03885f90f29e906bd8eb0cb2c3d815ee1ad2b3c989c9060200160405180910390a1005b600080fd5b6100f16100ec366004610e72565b610251565b005b3480156100ff57600080fd5b5060015b6040519081526020015b60405180910390f35b34801561012257600080fd5b506100f1610131366004610efc565b6104fc565b34801561014257600080fd5b506100f1610151366004610efc565b61052c565b34801561016257600080fd5b50610182610171366004610f87565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161010d565b3480156101a757600080fd5b50600054610103565b3480156101bc57600080fd5b506100f16101cb366004610efc565b6107a2565b3480156101dc57600080fd5b506100f16101eb366004610efc565b61098b565b3480156101fc57600080fd5b506100f161020b366004610efc565b6109c0565b34801561021c57600080fd5b506100f161022b366004610efc565b50505050565b34801561023d57600080fd5b506100f161024c366004610efc565b610c32565b60005b61026160c0830183610ff5565b90508110156104545761027760c0830183610ff5565b828181106102875761028761103e565b61029d9260206040909202019081019150611054565b6001600160a01b03166323b872dd33306102ba60c0870187610ff5565b868181106102ca576102ca61103e565b6040805160e088901b6001600160e01b03191681526001600160a01b0396871660048201529490951660248501529093020160200135604482015260640190506020604051808303816000875af1158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d919061106f565b5061035b60c0830183610ff5565b8281811061036b5761036b61103e565b6103819260206040909202019081019150611054565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006103bd60c0860186610ff5565b858181106103cd576103cd61103e565b905060400201602001356040518363ffffffff1660e01b81526004016104089291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b919061106f565b50600101610254565b50600061045f610d0e565b9050808260600135101561049857604051635cd2ad5760e01b815260608301356004820152602481018290526044015b60405180910390fd5b346104ab60808401356060850135611091565b11156104e657346104c460808401356060850135611091565b60405163e3a1514160e01b81526004810192909252602482015260440161048f565b6104f86104f2836113e8565b34610d97565b5050565b600061050a828401846114ff565b60008055604051632173ad2760e21b815290915061048f908290600401611581565b60006105388585610e33565b9050600061054883850185611594565b905060005b815181101561079957600082828151811061056a5761056a61103e565b6020026020010151905080600001516001600160a01b031663095ea7b36105ae7f000000000000000000000000000000000000000000000000000000000000000090565b60208401516040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610622919061106f565b50604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161063a57905050905081816000815181106106775761067761103e565b6020026020010181905250600060405180610100016040528087600001516001600160401b0316815260200187606001518152602001604051806020016040528060008152508152602001600081526020016000815260200160006001600160401b038111156106e9576106e96110b2565b60405190808252806020026020018201604052801561071c57816020015b60608152602001906001900390816107075790505b508152602080820185905260408051600080825292810182529201919061077e565b61076b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b81526020019060019003908161073e5790505b509052905061078e816000610d97565b50505060010161054d565b50505050505050565b60006107b0828401846115c8565b905060006107be8686610e33565b905060005b82518110156108ac578281815181106107de576107de61103e565b6020026020010151600001516001600160a01b031663095ea7b361081f7f000000000000000000000000000000000000000000000000000000000000000090565b8584815181106108315761083161103e565b6020026020010151602001516040518363ffffffff1660e01b815260040161086e9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b5050600190920191506107c39050565b50604080516101008101825282516001600160401b031681526060808401516020808401919091528351908101845260008082529383015281018290526080810182905260a081018260405190808252806020026020018201604052801561092857816020015b60608152602001906001900390816109135790505b508152602001600060405190808252806020026020018201604052801561097557816020015b604080518082019091526000808252602082015281526020019060019003908161094e5790505b5081526020018490529050610799816000610d97565b600080805561099c828401846114ff565b90508060405162461bcd60e51b815260040161048f9190611581565b505050505050565b60006109cc8585610e33565b905060006109dc83850185611594565b825160208401516040808601516060870151608088015192519596507f7455bef08ac052a65b30e5155a7c364504a560fd4753a612d34802695a56f36595610a2895949390889061164d565b60405180910390a160005b8151811015610b2a57818181518110610a4e57610a4e61103e565b6020026020010151600001516001600160a01b031663095ea7b3610a8f7f000000000000000000000000000000000000000000000000000000000000000090565b848481518110610aa157610aa161103e565b6020026020010151602001516040518363ffffffff1660e01b8152600401610ade9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b21919061106f565b50600101610a33565b506109b860405180610100016040528084600001516001600160401b0316815260200184606001518152602001604051806020016040528060008152508152602001600081526020016000815260200160006001600160401b03811115610b9357610b936110b2565b604051908082528060200260200182016040528015610bc657816020015b6060815260200190600190039081610bb15790505b5081526020808201859052604080516000808252928101825292019190610c28565b610c15604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081610be85790505b5090526000610d97565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7b576040516367ab7efd60e01b815260040160405180910390fd5b6000610c878585610e33565b90506000610c97838501856116ae565b905080600080828254610caa9190611091565b925050819055507f526f6652e74a3d979e195201cecc97a834b957cc0097468b9843d280b17a5d1a8183600001518460200151856040015186606001518760800151604051610cfe969594939291906116c7565b60405180910390a1505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a5a410316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d92919061170d565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e289adcd82600185604051602001610dda91906117d6565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401610e069291906118a2565b6000604051808303818588803b158015610e1f57600080fd5b505af1158015610799573d6000803e3d6000fd5b6040805160a0810182526000808252602082018190529181019190915260608082018190526080820152610e69828401846118bb565b90505b92915050565b600060208284031215610e8457600080fd5b81356001600160401b03811115610e9a57600080fd5b82016101008185031215610ead57600080fd5b9392505050565b60008083601f840112610ec657600080fd5b5081356001600160401b03811115610edd57600080fd5b602083019150836020828501011115610ef557600080fd5b9250929050565b60008060008060408587031215610f1257600080fd5b84356001600160401b03811115610f2857600080fd5b610f3487828801610eb4565b90955093505060208501356001600160401b03811115610f5357600080fd5b610f5f87828801610eb4565b95989497509550505050565b80356001600160a01b0381168114610f8257600080fd5b919050565b600080600080600060808688031215610f9f57600080fd5b610fa886610f6b565b9450610fb660208701610f6b565b93506040860135925060608601356001600160401b03811115610fd857600080fd5b610fe488828901610eb4565b969995985093965092949392505050565b6000808335601e1984360301811261100c57600080fd5b8301803591506001600160401b0382111561102657600080fd5b6020019150600681901b3603821315610ef557600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561106657600080fd5b610e6982610f6b565b60006020828403121561108157600080fd5b81518015158114610ead57600080fd5b80820180821115610e6c57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156110ea576110ea6110b2565b60405290565b604051606081016001600160401b03811182821017156110ea576110ea6110b2565b60405161010081016001600160401b03811182821017156110ea576110ea6110b2565b60405160a081016001600160401b03811182821017156110ea576110ea6110b2565b604051601f8201601f191681016001600160401b038111828210171561117f5761117f6110b2565b604052919050565b80356001600160401b0381168114610f8257600080fd5b600082601f8301126111af57600080fd5b8135602083016000806001600160401b038411156111cf576111cf6110b2565b50601f8301601f19166020016111e481611157565b9150508281528583830111156111f957600080fd5b82826020830137600092810160200192909252509392505050565b60006001600160401b0382111561122d5761122d6110b2565b5060051b60200190565b600082601f83011261124857600080fd5b813561125b61125682611214565b611157565b8082825260208201915060208360051b86010192508583111561127d57600080fd5b602085015b838110156112be5780356001600160401b038111156112a057600080fd5b6112af886020838a010161119e565b84525060209283019201611282565b5095945050505050565b600082601f8301126112d957600080fd5b81356112e761125682611214565b8082825260208201915060208360061b86010192508583111561130957600080fd5b602085015b838110156112be576040818803121561132657600080fd5b61132e6110c8565b61133782610f6b565b815260208281013581830152908452929092019160400161130e565b600082601f83011261136457600080fd5b813561137261125682611214565b8082825260208201915060206060840286010192508583111561139457600080fd5b602085015b838110156112be57606081880312156113b157600080fd5b6113b96110f0565b6113c282610f6b565b815260208281013581830152604080840135908301529084529290920191606001611399565b600061010082360312156113fb57600080fd5b611403611112565b61140c83611187565b815260208301356001600160401b0381111561142757600080fd5b6114333682860161119e565b60208301525060408301356001600160401b0381111561145257600080fd5b61145e3682860161119e565b604083015250606083810135908201526080808401359082015260a08301356001600160401b0381111561149157600080fd5b61149d36828601611237565b60a08301525060c08301356001600160401b038111156114bc57600080fd5b6114c8368286016112c8565b60c08301525060e08301356001600160401b038111156114e757600080fd5b6114f336828601611353565b60e08301525092915050565b60006020828403121561151157600080fd5b81356001600160401b0381111561152757600080fd5b6115338482850161119e565b949350505050565b6000815180845260005b8181101561156157602081850181015186830182015201611545565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e69602083018461153b565b6000602082840312156115a657600080fd5b81356001600160401b038111156115bc57600080fd5b611533848285016112c8565b6000602082840312156115da57600080fd5b81356001600160401b038111156115f057600080fd5b61153384828501611353565b600081518084526020840193506020830160005b8281101561164357815180516001600160a01b031687526020908101518188015260409096019590910190600101611610565b5093949350505050565b6001600160401b038716815285602082015284604082015260c06060820152600061167b60c083018661153b565b828103608084015261168d818661153b565b905082810360a08401526116a181856115fc565b9998505050505050505050565b6000602082840312156116c057600080fd5b5035919050565b8681526001600160401b038616602082015284604082015283606082015260c0608082015260006116fb60c083018561153b565b82810360a08401526116a1818561153b565b60006020828403121561171f57600080fd5b5051919050565b600082825180855260208501945060208160051b8301016020850160005b8381101561177657601f1985840301885261176083835161153b565b6020988901989093509190910190600101611744565b50909695505050505050565b600081518084526020840193506020830160005b8281101561164357815180516001600160a01b03168752602080820151818901526040918201519188019190915260609096019590910190600101611796565b602081526117f06020820183516001600160401b03169052565b60006020830151610100604084015261180d61012084018261153b565b90506040840151601f1984830301606085015261182a828261153b565b91505060608401516080840152608084015160a084015260a0840151601f198483030160c085015261185c8282611726565b91505060c0840151601f198483030160e085015261187a82826115fc565b91505060e0840151601f19848303016101008501526118998282611782565b95945050505050565b828152604060208201526000611533604083018461153b565b6000602082840312156118cd57600080fd5b81356001600160401b038111156118e357600080fd5b820160a081850312156118f557600080fd5b6118fd611135565b61190682611187565b8152602082810135908201526040808301359082015260608201356001600160401b0381111561193557600080fd5b6119418682850161119e565b60608301525060808201356001600160401b0381111561196057600080fd5b61196c8682850161119e565b60808301525094935050505056fea26469706673582212202b017125fab5680b2ea3a68dea223bd4749ff83afdc10090097193b7a8a0750e64736f6c634300081c0033",
  "deployedBytecode": "0x60806040526004361061009f5760003560e01c80632096525511610064578063209652551461019b578063302b86b0146101b05780633d2cfad2146101d057806350e9c31b146101f0578063bcb2606c14610210578063e77d74b01461023157600080fd5b806220cb2d146100de5780630d8e6e2c146100f3578063145769f51461011657806314c68a7314610136578063150b7a021461015657600080fd5b366100d9576040513481527f49b4c3f4344f33413322c03885f90f29e906bd8eb0cb2c3d815ee1ad2b3c989c9060200160405180910390a1005b600080fd5b6100f16100ec366004610e72565b610251565b005b3480156100ff57600080fd5b5060015b6040519081526020015b60405180910390f35b34801561012257600080fd5b506100f1610131366004610efc565b6104fc565b34801561014257600080fd5b506100f1610151366004610efc565b61052c565b34801561016257600080fd5b50610182610171366004610f87565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161010d565b3480156101a757600080fd5b50600054610103565b3480156101bc57600080fd5b506100f16101cb366004610efc565b6107a2565b3480156101dc57600080fd5b506100f16101eb366004610efc565b61098b565b3480156101fc57600080fd5b506100f161020b366004610efc565b6109c0565b34801561021c57600080fd5b506100f161022b366004610efc565b50505050565b34801561023d57600080fd5b506100f161024c366004610efc565b610c32565b60005b61026160c0830183610ff5565b90508110156104545761027760c0830183610ff5565b828181106102875761028761103e565b61029d9260206040909202019081019150611054565b6001600160a01b03166323b872dd33306102ba60c0870187610ff5565b868181106102ca576102ca61103e565b6040805160e088901b6001600160e01b03191681526001600160a01b0396871660048201529490951660248501529093020160200135604482015260640190506020604051808303816000875af1158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d919061106f565b5061035b60c0830183610ff5565b8281811061036b5761036b61103e565b6103819260206040909202019081019150611054565b6001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006103bd60c0860186610ff5565b858181106103cd576103cd61103e565b905060400201602001356040518363ffffffff1660e01b81526004016104089291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b919061106f565b50600101610254565b50600061045f610d0e565b9050808260600135101561049857604051635cd2ad5760e01b815260608301356004820152602481018290526044015b60405180910390fd5b346104ab60808401356060850135611091565b11156104e657346104c460808401356060850135611091565b60405163e3a1514160e01b81526004810192909252602482015260440161048f565b6104f86104f2836113e8565b34610d97565b5050565b600061050a828401846114ff565b60008055604051632173ad2760e21b815290915061048f908290600401611581565b60006105388585610e33565b9050600061054883850185611594565b905060005b815181101561079957600082828151811061056a5761056a61103e565b6020026020010151905080600001516001600160a01b031663095ea7b36105ae7f000000000000000000000000000000000000000000000000000000000000000090565b60208401516040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610622919061106f565b50604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161063a57905050905081816000815181106106775761067761103e565b6020026020010181905250600060405180610100016040528087600001516001600160401b0316815260200187606001518152602001604051806020016040528060008152508152602001600081526020016000815260200160006001600160401b038111156106e9576106e96110b2565b60405190808252806020026020018201604052801561071c57816020015b60608152602001906001900390816107075790505b508152602080820185905260408051600080825292810182529201919061077e565b61076b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b81526020019060019003908161073e5790505b509052905061078e816000610d97565b50505060010161054d565b50505050505050565b60006107b0828401846115c8565b905060006107be8686610e33565b905060005b82518110156108ac578281815181106107de576107de61103e565b6020026020010151600001516001600160a01b031663095ea7b361081f7f000000000000000000000000000000000000000000000000000000000000000090565b8584815181106108315761083161103e565b6020026020010151602001516040518363ffffffff1660e01b815260040161086e9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b5050600190920191506107c39050565b50604080516101008101825282516001600160401b031681526060808401516020808401919091528351908101845260008082529383015281018290526080810182905260a081018260405190808252806020026020018201604052801561092857816020015b60608152602001906001900390816109135790505b508152602001600060405190808252806020026020018201604052801561097557816020015b604080518082019091526000808252602082015281526020019060019003908161094e5790505b5081526020018490529050610799816000610d97565b600080805561099c828401846114ff565b90508060405162461bcd60e51b815260040161048f9190611581565b505050505050565b60006109cc8585610e33565b905060006109dc83850185611594565b825160208401516040808601516060870151608088015192519596507f7455bef08ac052a65b30e5155a7c364504a560fd4753a612d34802695a56f36595610a2895949390889061164d565b60405180910390a160005b8151811015610b2a57818181518110610a4e57610a4e61103e565b6020026020010151600001516001600160a01b031663095ea7b3610a8f7f000000000000000000000000000000000000000000000000000000000000000090565b848481518110610aa157610aa161103e565b6020026020010151602001516040518363ffffffff1660e01b8152600401610ade9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b21919061106f565b50600101610a33565b506109b860405180610100016040528084600001516001600160401b0316815260200184606001518152602001604051806020016040528060008152508152602001600081526020016000815260200160006001600160401b03811115610b9357610b936110b2565b604051908082528060200260200182016040528015610bc657816020015b6060815260200190600190039081610bb15790505b5081526020808201859052604080516000808252928101825292019190610c28565b610c15604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081610be85790505b5090526000610d97565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7b576040516367ab7efd60e01b815260040160405180910390fd5b6000610c878585610e33565b90506000610c97838501856116ae565b905080600080828254610caa9190611091565b925050819055507f526f6652e74a3d979e195201cecc97a834b957cc0097468b9843d280b17a5d1a8183600001518460200151856040015186606001518760800151604051610cfe969594939291906116c7565b60405180910390a1505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a5a410316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d92919061170d565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e289adcd82600185604051602001610dda91906117d6565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401610e069291906118a2565b6000604051808303818588803b158015610e1f57600080fd5b505af1158015610799573d6000803e3d6000fd5b6040805160a0810182526000808252602082018190529181019190915260608082018190526080820152610e69828401846118bb565b90505b92915050565b600060208284031215610e8457600080fd5b81356001600160401b03811115610e9a57600080fd5b82016101008185031215610ead57600080fd5b9392505050565b60008083601f840112610ec657600080fd5b5081356001600160401b03811115610edd57600080fd5b602083019150836020828501011115610ef557600080fd5b9250929050565b60008060008060408587031215610f1257600080fd5b84356001600160401b03811115610f2857600080fd5b610f3487828801610eb4565b90955093505060208501356001600160401b03811115610f5357600080fd5b610f5f87828801610eb4565b95989497509550505050565b80356001600160a01b0381168114610f8257600080fd5b919050565b600080600080600060808688031215610f9f57600080fd5b610fa886610f6b565b9450610fb660208701610f6b565b93506040860135925060608601356001600160401b03811115610fd857600080fd5b610fe488828901610eb4565b969995985093965092949392505050565b6000808335601e1984360301811261100c57600080fd5b8301803591506001600160401b0382111561102657600080fd5b6020019150600681901b3603821315610ef557600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561106657600080fd5b610e6982610f6b565b60006020828403121561108157600080fd5b81518015158114610ead57600080fd5b80820180821115610e6c57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156110ea576110ea6110b2565b60405290565b604051606081016001600160401b03811182821017156110ea576110ea6110b2565b60405161010081016001600160401b03811182821017156110ea576110ea6110b2565b60405160a081016001600160401b03811182821017156110ea576110ea6110b2565b604051601f8201601f191681016001600160401b038111828210171561117f5761117f6110b2565b604052919050565b80356001600160401b0381168114610f8257600080fd5b600082601f8301126111af57600080fd5b8135602083016000806001600160401b038411156111cf576111cf6110b2565b50601f8301601f19166020016111e481611157565b9150508281528583830111156111f957600080fd5b82826020830137600092810160200192909252509392505050565b60006001600160401b0382111561122d5761122d6110b2565b5060051b60200190565b600082601f83011261124857600080fd5b813561125b61125682611214565b611157565b8082825260208201915060208360051b86010192508583111561127d57600080fd5b602085015b838110156112be5780356001600160401b038111156112a057600080fd5b6112af886020838a010161119e565b84525060209283019201611282565b5095945050505050565b600082601f8301126112d957600080fd5b81356112e761125682611214565b8082825260208201915060208360061b86010192508583111561130957600080fd5b602085015b838110156112be576040818803121561132657600080fd5b61132e6110c8565b61133782610f6b565b815260208281013581830152908452929092019160400161130e565b600082601f83011261136457600080fd5b813561137261125682611214565b8082825260208201915060206060840286010192508583111561139457600080fd5b602085015b838110156112be57606081880312156113b157600080fd5b6113b96110f0565b6113c282610f6b565b815260208281013581830152604080840135908301529084529290920191606001611399565b600061010082360312156113fb57600080fd5b611403611112565b61140c83611187565b815260208301356001600160401b0381111561142757600080fd5b6114333682860161119e565b60208301525060408301356001600160401b0381111561145257600080fd5b61145e3682860161119e565b604083015250606083810135908201526080808401359082015260a08301356001600160401b0381111561149157600080fd5b61149d36828601611237565b60a08301525060c08301356001600160401b038111156114bc57600080fd5b6114c8368286016112c8565b60c08301525060e08301356001600160401b038111156114e757600080fd5b6114f336828601611353565b60e08301525092915050565b60006020828403121561151157600080fd5b81356001600160401b0381111561152757600080fd5b6115338482850161119e565b949350505050565b6000815180845260005b8181101561156157602081850181015186830182015201611545565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e69602083018461153b565b6000602082840312156115a657600080fd5b81356001600160401b038111156115bc57600080fd5b611533848285016112c8565b6000602082840312156115da57600080fd5b81356001600160401b038111156115f057600080fd5b61153384828501611353565b600081518084526020840193506020830160005b8281101561164357815180516001600160a01b031687526020908101518188015260409096019590910190600101611610565b5093949350505050565b6001600160401b038716815285602082015284604082015260c06060820152600061167b60c083018661153b565b828103608084015261168d818661153b565b905082810360a08401526116a181856115fc565b9998505050505050505050565b6000602082840312156116c057600080fd5b5035919050565b8681526001600160401b038616602082015284604082015283606082015260c0608082015260006116fb60c083018561153b565b82810360a08401526116a1818561153b565b60006020828403121561171f57600080fd5b5051919050565b600082825180855260208501945060208160051b8301016020850160005b8381101561177657601f1985840301885261176083835161153b565b6020988901989093509190910190600101611744565b50909695505050505050565b600081518084526020840193506020830160005b8281101561164357815180516001600160a01b03168752602080820151818901526040918201519188019190915260609096019590910190600101611796565b602081526117f06020820183516001600160401b03169052565b60006020830151610100604084015261180d61012084018261153b565b90506040840151601f1984830301606085015261182a828261153b565b91505060608401516080840152608084015160a084015260a0840151601f198483030160c085015261185c8282611726565b91505060c0840151601f198483030160e085015261187a82826115fc565b91505060e0840151601f19848303016101008501526118998282611782565b95945050505050565b828152604060208201526000611533604083018461153b565b6000602082840312156118cd57600080fd5b81356001600160401b038111156118e357600080fd5b820160a081850312156118f557600080fd5b6118fd611135565b61190682611187565b8152602082810135908201526040808301359082015260608201356001600160401b0381111561193557600080fd5b6119418682850161119e565b60608301525060808201356001600160401b0381111561196057600080fd5b61196c8682850161119e565b60808301525094935050505056fea26469706673582212202b017125fab5680b2ea3a68dea223bd4749ff83afdc10090097193b7a8a0750e64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
