{
	"id": "2370f52009332c40ea6530c0e21e7a82",
	"_format": "hh-sol-build-info-1",
	"solcVersion": "0.8.11",
	"solcLongVersion": "0.8.11+commit.d7f03943",
	"input": {
		"language": "Solidity",
		"sources": {
			"bridges/libs/LibDiamond.sol": {
				"content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n  bytes32 internal constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n  struct FacetAddressAndPosition {\n    address facetAddress;\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n  }\n\n  struct FacetFunctionSelectors {\n    bytes4[] functionSelectors;\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n  }\n\n  struct DiamondStorage {\n    // maps function selector to the facet address and\n    // the position of the selector in the facetFunctionSelectors.selectors array\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n    // maps facet addresses to function selectors\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n    // facet addresses\n    address[] facetAddresses;\n    // Used to query if a contract implements an interface.\n    // Used to implement ERC-165.\n    mapping(bytes4 => bool) supportedInterfaces;\n    // owner of the contract\n    address contractOwner;\n  }\n\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n    bytes32 position = DIAMOND_STORAGE_POSITION;\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n        ds.slot := position\n    }\n  }\n\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n  function setContractOwner(address _newOwner) internal {\n    DiamondStorage storage ds = diamondStorage();\n    address previousOwner = ds.contractOwner;\n    ds.contractOwner = _newOwner;\n    emit OwnershipTransferred(previousOwner, _newOwner);\n  }\n\n  function contractOwner() internal view returns (address contractOwner_) {\n    contractOwner_ = diamondStorage().contractOwner;\n  }\n\n  function enforceIsContractOwner() internal view {\n    require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n  }\n\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n  // Internal function version of diamondCut\n  function diamondCut(\n    IDiamondCut.FacetCut[] memory _diamondCut,\n    address _init,\n    bytes memory _calldata\n  ) internal {\n    for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n      if (action == IDiamondCut.FacetCutAction.Add) {\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n      } else {\n        revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n      }\n    }\n    emit DiamondCut(_diamondCut, _init, _calldata);\n    initializeDiamondCut(_init, _calldata);\n  }\n\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n    require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n    DiamondStorage storage ds = diamondStorage();\n    require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n    // add new facet address if it does not exist\n    if (selectorPosition == 0) {\n      addFacet(ds, _facetAddress);\n    }\n    for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n      bytes4 selector = _functionSelectors[selectorIndex];\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n      require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n      addFunction(ds, selector, selectorPosition, _facetAddress);\n      selectorPosition++;\n    }\n  }\n\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n    require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n    DiamondStorage storage ds = diamondStorage();\n    require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n    // add new facet address if it does not exist\n    if (selectorPosition == 0) {\n      addFacet(ds, _facetAddress);\n    }\n    for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n      bytes4 selector = _functionSelectors[selectorIndex];\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n      require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n      removeFunction(ds, oldFacetAddress, selector);\n      addFunction(ds, selector, selectorPosition, _facetAddress);\n      selectorPosition++;\n    }\n  }\n\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n    require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n    DiamondStorage storage ds = diamondStorage();\n    // if function does not exist then do nothing and return\n    require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n    for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n      bytes4 selector = _functionSelectors[selectorIndex];\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n      removeFunction(ds, oldFacetAddress, selector);\n    }\n  }\n\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n    enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n    ds.facetAddresses.push(_facetAddress);\n  }\n\n  function addFunction(\n    DiamondStorage storage ds,\n    bytes4 _selector,\n    uint96 _selectorPosition,\n    address _facetAddress\n  ) internal {\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n  }\n\n  function removeFunction(\n    DiamondStorage storage ds,\n    address _facetAddress,\n    bytes4 _selector\n  ) internal {\n    require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n    // an immutable function is a function defined directly in a diamond\n    require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n    // replace selector with last selector, then delete last selector\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n    // if not the same then replace _selector with lastSelector\n    if (selectorPosition != lastSelectorPosition) {\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n    }\n    // delete the last selector\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n    delete ds.selectorToFacetAndPosition[_selector];\n\n    // if no more selectors for facet address then delete the facet address\n    if (lastSelectorPosition == 0) {\n      // replace facet address with last facet address and delete last facet address\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n      if (facetAddressPosition != lastFacetAddressPosition) {\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n      }\n      ds.facetAddresses.pop();\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n    }\n  }\n\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n    if (_init == address(0)) {\n      require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n    } else {\n      require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n      if (_init != address(this)) {\n        enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n      }\n      // solhint-disable-next-line avoid-low-level-calls\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\n      if (!success) {\n        if (error.length > 0) {\n          // bubble up the error\n          revert(string(error));\n        } else {\n          revert(\"LibDiamondCut: _init function reverted\");\n        }\n      }\n    }\n  }\n\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n    uint256 contractSize;\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      contractSize := extcodesize(_contract)\n    }\n    require(contractSize > 0, _errorMessage);\n  }\n}\n"
			},
			"bridges/interfaces/IDiamondCut.sol": {
				"content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\ninterface IDiamondCut {\n  enum FacetCutAction {\n    Add,\n    Replace,\n    Remove\n  }\n  // Add=0, Replace=1, Remove=2\n\n  struct FacetCut {\n    address facetAddress;\n    FacetCutAction action;\n    bytes4[] functionSelectors;\n  }\n\n  /// @notice Add/replace/remove any number of functions and optionally execute\n  ///         a function with delegatecall\n  /// @param _diamondCut Contains the facet addresses and function selectors\n  /// @param _init The address of the contract or facet to execute _calldata\n  /// @param _calldata A function call, including function selector and arguments\n  ///                  _calldata is executed with delegatecall on _init\n  function diamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external;\n\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n"
			}
		},
		"settings": {
			"optimizer": {
				"enabled": false,
				"runs": 200
			},
			"outputSelection": {
				"*": {
					"": [
						"ast"
					],
					"*": [
						"abi",
						"metadata",
						"devdoc",
						"userdoc",
						"storageLayout",
						"evm.legacyAssembly",
						"evm.bytecode",
						"evm.deployedBytecode",
						"evm.methodIdentifiers",
						"evm.gasEstimates",
						"evm.assembly"
					]
				}
			}
		}
	},
	"output": {
		"contracts": {
			"bridges/interfaces/IDiamondCut.sol": {
				"IDiamondCut": {
					"abi": [
						{
							"anonymous": false,
							"inputs": [
								{
									"components": [
										{
											"internalType": "address",
											"name": "facetAddress",
											"type": "address"
										},
										{
											"internalType": "enum IDiamondCut.FacetCutAction",
											"name": "action",
											"type": "uint8"
										},
										{
											"internalType": "bytes4[]",
											"name": "functionSelectors",
											"type": "bytes4[]"
										}
									],
									"indexed": false,
									"internalType": "struct IDiamondCut.FacetCut[]",
									"name": "_diamondCut",
									"type": "tuple[]"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "_init",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "bytes",
									"name": "_calldata",
									"type": "bytes"
								}
							],
							"name": "DiamondCut",
							"type": "event"
						},
						{
							"inputs": [
								{
									"components": [
										{
											"internalType": "address",
											"name": "facetAddress",
											"type": "address"
										},
										{
											"internalType": "enum IDiamondCut.FacetCutAction",
											"name": "action",
											"type": "uint8"
										},
										{
											"internalType": "bytes4[]",
											"name": "functionSelectors",
											"type": "bytes4[]"
										}
									],
									"internalType": "struct IDiamondCut.FacetCut[]",
									"name": "_diamondCut",
									"type": "tuple[]"
								},
								{
									"internalType": "address",
									"name": "_init",
									"type": "address"
								},
								{
									"internalType": "bytes",
									"name": "_calldata",
									"type": "bytes"
								}
							],
							"name": "diamondCut",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {
							"diamondCut((address,uint8,bytes4[])[],address,bytes)": {
								"params": {
									"_calldata": "A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init",
									"_diamondCut": "Contains the facet addresses and function selectors",
									"_init": "The address of the contract or facet to execute _calldata"
								}
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"diamondCut((address,uint8,bytes4[])[],address,bytes)": "1f931c1c"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute         a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/interfaces/IDiamondCut.sol\":\"IDiamondCut\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"bridges/interfaces/IDiamondCut.sol\":{\"keccak256\":\"0x895069af98e2df3257996711d1f870eff1d97a445c952d5f89621ea508dafbd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://97f085c1d787a64ec56dcb4c6d03dc84bb457006bf2e2761c69f3b2873fc1d71\",\"dweb:/ipfs/Qmd8JyuZNP6icA9HqzpRSzQhFHP6CQvHbGEp7AhfGLEmP4\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"diamondCut((address,uint8,bytes4[])[],address,bytes)": {
								"notice": "Add/replace/remove any number of functions and optionally execute         a function with delegatecall"
							}
						},
						"version": 1
					}
				}
			},
			"bridges/libs/LibDiamond.sol": {
				"LibDiamond": {
					"abi": [
						{
							"anonymous": false,
							"inputs": [
								{
									"components": [
										{
											"internalType": "address",
											"name": "facetAddress",
											"type": "address"
										},
										{
											"internalType": "enum IDiamondCut.FacetCutAction",
											"name": "action",
											"type": "uint8"
										},
										{
											"internalType": "bytes4[]",
											"name": "functionSelectors",
											"type": "bytes4[]"
										}
									],
									"indexed": false,
									"internalType": "struct IDiamondCut.FacetCut[]",
									"name": "_diamondCut",
									"type": "tuple[]"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "_init",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "bytes",
									"name": "_calldata",
									"type": "bytes"
								}
							],
							"name": "DiamondCut",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "previousOwner",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "newOwner",
									"type": "address"
								}
							],
							"name": "OwnershipTransferred",
							"type": "event"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"bridges/libs/LibDiamond.sol\":127:9786  library LibDiamond {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"bridges/libs/LibDiamond.sol\":127:9786  library LibDiamond {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa26469706673582212209073c9156a34585305f6bcda346d3bcb2fec011efa12a4c0459d1aee64ee1d1164736f6c634300080b0033\n}\n",
						"bytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209073c9156a34585305f6bcda346d3bcb2fec011efa12a4c0459d1aee64ee1d1164736f6c634300080b0033",
							"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP1 PUSH20 0xC9156A34585305F6BCDA346D3BCB2FEC011EFA12 LOG4 0xC0 GASLIMIT SWAP14 BYTE 0xEE PUSH5 0xEE1D116473 PUSH16 0x6C634300080B00330000000000000000 ",
							"sourceMap": "127:9659:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"functionDebugData": {},
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209073c9156a34585305f6bcda346d3bcb2fec011efa12a4c0459d1aee64ee1d1164736f6c634300080b0033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP1 PUSH20 0xC9156A34585305F6BCDA346D3BCB2FEC011EFA12 LOG4 0xC0 GASLIMIT SWAP14 BYTE 0xEE PUSH5 0xEE1D116473 PUSH16 0x6C634300080B00330000000000000000 ",
							"sourceMap": "127:9659:1:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "97",
								"totalCost": "17297"
							},
							"internal": {
								"addFacet(struct LibDiamond.DiamondStorage storage pointer,address)": "infinite",
								"addFunction(struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)": "infinite",
								"addFunctions(address,bytes4[] memory)": "infinite",
								"contractOwner()": "infinite",
								"diamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)": "infinite",
								"diamondStorage()": "infinite",
								"enforceHasContractCode(address,string memory)": "infinite",
								"enforceIsContractOwner()": "infinite",
								"initializeDiamondCut(address,bytes memory)": "infinite",
								"removeFunction(struct LibDiamond.DiamondStorage storage pointer,address,bytes4)": "infinite",
								"removeFunctions(address,bytes4[] memory)": "infinite",
								"replaceFunctions(address,bytes4[] memory)": "infinite",
								"setContractOwner(address)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH #[$]",
									"source": 1,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH [$]",
									"source": 1,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "B"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP3",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP3",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP3",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "CODECOPY",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP1",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "MLOAD",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "0"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "BYTE",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "73"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "EQ",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH [tag]",
									"source": 1,
									"value": "1"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "JUMPI",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "0"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "MSTORE",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "0"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "4"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "MSTORE",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "24"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "0"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "REVERT",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "tag",
									"source": 1,
									"value": "1"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "JUMPDEST",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "ADDRESS",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "0"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "MSTORE",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "PUSH",
									"source": 1,
									"value": "73"
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP2",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "MSTORE8",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP3",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "DUP2",
									"source": 1
								},
								{
									"begin": 127,
									"end": 9786,
									"name": "RETURN",
									"source": 1
								}
							],
							".data": {
								"0": {
									".auxdata": "a26469706673582212209073c9156a34585305f6bcda346d3bcb2fec011efa12a4c0459d1aee64ee1d1164736f6c634300080b0033",
									".code": [
										{
											"begin": 127,
											"end": 9786,
											"name": "PUSHDEPLOYADDRESS",
											"source": 1
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "ADDRESS",
											"source": 1
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "EQ",
											"source": 1
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "PUSH",
											"source": 1,
											"value": "80"
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "PUSH",
											"source": 1,
											"value": "40"
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "MSTORE",
											"source": 1
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "PUSH",
											"source": 1,
											"value": "0"
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "DUP1",
											"source": 1
										},
										{
											"begin": 127,
											"end": 9786,
											"name": "REVERT",
											"source": 1
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/libs/LibDiamond.sol\":\"LibDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"bridges/interfaces/IDiamondCut.sol\":{\"keccak256\":\"0x895069af98e2df3257996711d1f870eff1d97a445c952d5f89621ea508dafbd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://97f085c1d787a64ec56dcb4c6d03dc84bb457006bf2e2761c69f3b2873fc1d71\",\"dweb:/ipfs/Qmd8JyuZNP6icA9HqzpRSzQhFHP6CQvHbGEp7AhfGLEmP4\"]},\"bridges/libs/LibDiamond.sol\":{\"keccak256\":\"0xf27658fee344f2b02d6881ee6c3b853868ecceafe72867256b9cb94d75888c52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://409c3f67362abba3c74f31ef99f2f3692b5a4ca0c1fc025c62da1b8251d90df5\",\"dweb:/ipfs/QmPryPC22UfHNj6xNp3B1CcB4nFan32iDc4jsM16EMiTuG\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			}
		},
		"sources": {
			"bridges/interfaces/IDiamondCut.sol": {
				"ast": {
					"absolutePath": "bridges/interfaces/IDiamondCut.sol",
					"exportedSymbols": {
						"IDiamondCut": [
							37
						]
					},
					"id": 38,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1,
							"literals": [
								"solidity",
								">=",
								"0.8",
								".4",
								"<",
								"0.9",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "32:31:0"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"canonicalName": "IDiamondCut",
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 37,
							"linearizedBaseContracts": [
								37
							],
							"name": "IDiamondCut",
							"nameLocation": "75:11:0",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"canonicalName": "IDiamondCut.FacetCutAction",
									"id": 5,
									"members": [
										{
											"id": 2,
											"name": "Add",
											"nameLocation": "117:3:0",
											"nodeType": "EnumValue",
											"src": "117:3:0"
										},
										{
											"id": 3,
											"name": "Replace",
											"nameLocation": "126:7:0",
											"nodeType": "EnumValue",
											"src": "126:7:0"
										},
										{
											"id": 4,
											"name": "Remove",
											"nameLocation": "139:6:0",
											"nodeType": "EnumValue",
											"src": "139:6:0"
										}
									],
									"name": "FacetCutAction",
									"nameLocation": "96:14:0",
									"nodeType": "EnumDefinition",
									"src": "91:58:0"
								},
								{
									"canonicalName": "IDiamondCut.FacetCut",
									"id": 14,
									"members": [
										{
											"constant": false,
											"id": 7,
											"mutability": "mutable",
											"name": "facetAddress",
											"nameLocation": "215:12:0",
											"nodeType": "VariableDeclaration",
											"scope": 14,
											"src": "207:20:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 6,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "207:7:0",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 10,
											"mutability": "mutable",
											"name": "action",
											"nameLocation": "248:6:0",
											"nodeType": "VariableDeclaration",
											"scope": 14,
											"src": "233:21:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_enum$_FacetCutAction_$5",
												"typeString": "enum IDiamondCut.FacetCutAction"
											},
											"typeName": {
												"id": 9,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 8,
													"name": "FacetCutAction",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 5,
													"src": "233:14:0"
												},
												"referencedDeclaration": 5,
												"src": "233:14:0",
												"typeDescriptions": {
													"typeIdentifier": "t_enum$_FacetCutAction_$5",
													"typeString": "enum IDiamondCut.FacetCutAction"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 13,
											"mutability": "mutable",
											"name": "functionSelectors",
											"nameLocation": "269:17:0",
											"nodeType": "VariableDeclaration",
											"scope": 14,
											"src": "260:26:0",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
												"typeString": "bytes4[]"
											},
											"typeName": {
												"baseType": {
													"id": 11,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "260:6:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"id": 12,
												"nodeType": "ArrayTypeName",
												"src": "260:8:0",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
													"typeString": "bytes4[]"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "FacetCut",
									"nameLocation": "192:8:0",
									"nodeType": "StructDefinition",
									"scope": 37,
									"src": "185:106:0",
									"visibility": "public"
								},
								{
									"documentation": {
										"id": 15,
										"nodeType": "StructuredDocumentation",
										"src": "295:428:0",
										"text": "@notice Add/replace/remove any number of functions and optionally execute\n         a function with delegatecall\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments\n                  _calldata is executed with delegatecall on _init"
									},
									"functionSelector": "1f931c1c",
									"id": 26,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "diamondCut",
									"nameLocation": "735:10:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 24,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 19,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "771:11:0",
												"nodeType": "VariableDeclaration",
												"scope": 26,
												"src": "751:31:0",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_calldata_ptr_$dyn_calldata_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 17,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 16,
															"name": "FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 14,
															"src": "751:8:0"
														},
														"referencedDeclaration": 14,
														"src": "751:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$14_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 18,
													"nodeType": "ArrayTypeName",
													"src": "751:10:0",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 21,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "796:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 26,
												"src": "788:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 20,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "788:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 23,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "822:9:0",
												"nodeType": "VariableDeclaration",
												"scope": 26,
												"src": "807:24:0",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_calldata_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 22,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "807:5:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "745:90:0"
									},
									"returnParameters": {
										"id": 25,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "844:0:0"
									},
									"scope": 37,
									"src": "726:119:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"anonymous": false,
									"id": 36,
									"name": "DiamondCut",
									"nameLocation": "855:10:0",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 35,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 30,
												"indexed": false,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "877:11:0",
												"nodeType": "VariableDeclaration",
												"scope": 36,
												"src": "866:22:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 28,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 27,
															"name": "FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 14,
															"src": "866:8:0"
														},
														"referencedDeclaration": 14,
														"src": "866:8:0",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$14_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 29,
													"nodeType": "ArrayTypeName",
													"src": "866:10:0",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 32,
												"indexed": false,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "898:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 36,
												"src": "890:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 31,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "890:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 34,
												"indexed": false,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "911:9:0",
												"nodeType": "VariableDeclaration",
												"scope": 36,
												"src": "905:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 33,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "905:5:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "865:56:0"
									},
									"src": "849:73:0"
								}
							],
							"scope": 38,
							"src": "65:859:0",
							"usedErrors": []
						}
					],
					"src": "32:893:0"
				},
				"id": 0
			},
			"bridges/libs/LibDiamond.sol": {
				"ast": {
					"absolutePath": "bridges/libs/LibDiamond.sol",
					"exportedSymbols": {
						"IDiamondCut": [
							37
						],
						"LibDiamond": [
							871
						]
					},
					"id": 872,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 39,
							"literals": [
								"solidity",
								">=",
								"0.8",
								".4",
								"<",
								"0.9",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "32:31:1"
						},
						{
							"absolutePath": "bridges/interfaces/IDiamondCut.sol",
							"file": "../interfaces/IDiamondCut.sol",
							"id": 41,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 872,
							"sourceUnit": 38,
							"src": "65:60:1",
							"symbolAliases": [
								{
									"foreign": {
										"id": 40,
										"name": "IDiamondCut",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "74:11:1",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"canonicalName": "LibDiamond",
							"contractDependencies": [],
							"contractKind": "library",
							"fullyImplemented": true,
							"id": 871,
							"linearizedBaseContracts": [
								871
							],
							"name": "LibDiamond",
							"nameLocation": "135:10:1",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"constant": true,
									"id": 46,
									"mutability": "constant",
									"name": "DIAMOND_STORAGE_POSITION",
									"nameLocation": "176:24:1",
									"nodeType": "VariableDeclaration",
									"scope": 871,
									"src": "150:98:1",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 42,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "150:7:1",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": {
										"arguments": [
											{
												"hexValue": "6469616d6f6e642e7374616e646172642e6469616d6f6e642e73746f72616765",
												"id": 44,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "213:34:1",
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c",
													"typeString": "literal_string \"diamond.standard.diamond.storage\""
												},
												"value": "diamond.standard.diamond.storage"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c",
													"typeString": "literal_string \"diamond.standard.diamond.storage\""
												}
											],
											"id": 43,
											"name": "keccak256",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 4294967288,
											"src": "203:9:1",
											"typeDescriptions": {
												"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
												"typeString": "function (bytes memory) pure returns (bytes32)"
											}
										},
										"id": 45,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "203:45:1",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"visibility": "internal"
								},
								{
									"canonicalName": "LibDiamond.FacetAddressAndPosition",
									"id": 51,
									"members": [
										{
											"constant": false,
											"id": 48,
											"mutability": "mutable",
											"name": "facetAddress",
											"nameLocation": "298:12:1",
											"nodeType": "VariableDeclaration",
											"scope": 51,
											"src": "290:20:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 47,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "290:7:1",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 50,
											"mutability": "mutable",
											"name": "functionSelectorPosition",
											"nameLocation": "323:24:1",
											"nodeType": "VariableDeclaration",
											"scope": 51,
											"src": "316:31:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint96",
												"typeString": "uint96"
											},
											"typeName": {
												"id": 49,
												"name": "uint96",
												"nodeType": "ElementaryTypeName",
												"src": "316:6:1",
												"typeDescriptions": {
													"typeIdentifier": "t_uint96",
													"typeString": "uint96"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "FacetAddressAndPosition",
									"nameLocation": "260:23:1",
									"nodeType": "StructDefinition",
									"scope": 871,
									"src": "253:161:1",
									"visibility": "public"
								},
								{
									"canonicalName": "LibDiamond.FacetFunctionSelectors",
									"id": 57,
									"members": [
										{
											"constant": false,
											"id": 54,
											"mutability": "mutable",
											"name": "functionSelectors",
											"nameLocation": "463:17:1",
											"nodeType": "VariableDeclaration",
											"scope": 57,
											"src": "454:26:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
												"typeString": "bytes4[]"
											},
											"typeName": {
												"baseType": {
													"id": 52,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "454:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"id": 53,
												"nodeType": "ArrayTypeName",
												"src": "454:8:1",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
													"typeString": "bytes4[]"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 56,
											"mutability": "mutable",
											"name": "facetAddressPosition",
											"nameLocation": "494:20:1",
											"nodeType": "VariableDeclaration",
											"scope": 57,
											"src": "486:28:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 55,
												"name": "uint256",
												"nodeType": "ElementaryTypeName",
												"src": "486:7:1",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "FacetFunctionSelectors",
									"nameLocation": "425:22:1",
									"nodeType": "StructDefinition",
									"scope": 871,
									"src": "418:153:1",
									"visibility": "public"
								},
								{
									"canonicalName": "LibDiamond.DiamondStorage",
									"id": 77,
									"members": [
										{
											"constant": false,
											"id": 62,
											"mutability": "mutable",
											"name": "selectorToFacetAndPosition",
											"nameLocation": "783:26:1",
											"nodeType": "VariableDeclaration",
											"scope": 77,
											"src": "740:69:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
												"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition)"
											},
											"typeName": {
												"id": 61,
												"keyType": {
													"id": 58,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "748:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"nodeType": "Mapping",
												"src": "740:42:1",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
													"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition)"
												},
												"valueType": {
													"id": 60,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 59,
														"name": "FacetAddressAndPosition",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 51,
														"src": "758:23:1"
													},
													"referencedDeclaration": 51,
													"src": "758:23:1",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage_ptr",
														"typeString": "struct LibDiamond.FacetAddressAndPosition"
													}
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 67,
											"mutability": "mutable",
											"name": "facetFunctionSelectors",
											"nameLocation": "908:22:1",
											"nodeType": "VariableDeclaration",
											"scope": 77,
											"src": "865:65:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
												"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors)"
											},
											"typeName": {
												"id": 66,
												"keyType": {
													"id": 63,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "873:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "Mapping",
												"src": "865:42:1",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
													"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors)"
												},
												"valueType": {
													"id": 65,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 64,
														"name": "FacetFunctionSelectors",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 57,
														"src": "884:22:1"
													},
													"referencedDeclaration": 57,
													"src": "884:22:1",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage_ptr",
														"typeString": "struct LibDiamond.FacetFunctionSelectors"
													}
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 70,
											"mutability": "mutable",
											"name": "facetAddresses",
											"nameLocation": "969:14:1",
											"nodeType": "VariableDeclaration",
											"scope": 77,
											"src": "959:24:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
												"typeString": "address[]"
											},
											"typeName": {
												"baseType": {
													"id": 68,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "959:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 69,
												"nodeType": "ArrayTypeName",
												"src": "959:9:1",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
													"typeString": "address[]"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 74,
											"mutability": "mutable",
											"name": "supportedInterfaces",
											"nameLocation": "1107:19:1",
											"nodeType": "VariableDeclaration",
											"scope": 77,
											"src": "1083:43:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
												"typeString": "mapping(bytes4 => bool)"
											},
											"typeName": {
												"id": 73,
												"keyType": {
													"id": 71,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "1091:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"nodeType": "Mapping",
												"src": "1083:23:1",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
													"typeString": "mapping(bytes4 => bool)"
												},
												"valueType": {
													"id": 72,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1101:4:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 76,
											"mutability": "mutable",
											"name": "contractOwner",
											"nameLocation": "1169:13:1",
											"nodeType": "VariableDeclaration",
											"scope": 77,
											"src": "1161:21:1",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 75,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1161:7:1",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "DiamondStorage",
									"nameLocation": "582:14:1",
									"nodeType": "StructDefinition",
									"scope": 871,
									"src": "575:612:1",
									"visibility": "public"
								},
								{
									"body": {
										"id": 88,
										"nodeType": "Block",
										"src": "1267:155:1",
										"statements": [
											{
												"assignments": [
													84
												],
												"declarations": [
													{
														"constant": false,
														"id": 84,
														"mutability": "mutable",
														"name": "position",
														"nameLocation": "1281:8:1",
														"nodeType": "VariableDeclaration",
														"scope": 88,
														"src": "1273:16:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														"typeName": {
															"id": 83,
															"name": "bytes32",
															"nodeType": "ElementaryTypeName",
															"src": "1273:7:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 86,
												"initialValue": {
													"id": 85,
													"name": "DIAMOND_STORAGE_POSITION",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 46,
													"src": "1292:24:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1273:43:1"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "1383:35:1",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1393:19:1",
															"value": {
																"name": "position",
																"nodeType": "YulIdentifier",
																"src": "1404:8:1"
															},
															"variableNames": [
																{
																	"name": "ds.slot",
																	"nodeType": "YulIdentifier",
																	"src": "1393:7:1"
																}
															]
														}
													]
												},
												"evmVersion": "london",
												"externalReferences": [
													{
														"declaration": 81,
														"isOffset": false,
														"isSlot": true,
														"src": "1393:7:1",
														"suffix": "slot",
														"valueSize": 1
													},
													{
														"declaration": 84,
														"isOffset": false,
														"isSlot": false,
														"src": "1404:8:1",
														"valueSize": 1
													}
												],
												"id": 87,
												"nodeType": "InlineAssembly",
												"src": "1374:44:1"
											}
										]
									},
									"id": 89,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "diamondStorage",
									"nameLocation": "1200:14:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 78,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1214:2:1"
									},
									"returnParameters": {
										"id": 82,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 81,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "1263:2:1",
												"nodeType": "VariableDeclaration",
												"scope": 89,
												"src": "1240:25:1",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 80,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 79,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "1240:14:1"
													},
													"referencedDeclaration": 77,
													"src": "1240:14:1",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1239:27:1"
									},
									"scope": 871,
									"src": "1191:231:1",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"anonymous": false,
									"id": 95,
									"name": "OwnershipTransferred",
									"nameLocation": "1432:20:1",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 94,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 91,
												"indexed": true,
												"mutability": "mutable",
												"name": "previousOwner",
												"nameLocation": "1469:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 95,
												"src": "1453:29:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 90,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1453:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 93,
												"indexed": true,
												"mutability": "mutable",
												"name": "newOwner",
												"nameLocation": "1500:8:1",
												"nodeType": "VariableDeclaration",
												"scope": 95,
												"src": "1484:24:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 92,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1484:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1452:57:1"
									},
									"src": "1426:84:1"
								},
								{
									"body": {
										"id": 122,
										"nodeType": "Block",
										"src": "1568:192:1",
										"statements": [
											{
												"assignments": [
													102
												],
												"declarations": [
													{
														"constant": false,
														"id": 102,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "1597:2:1",
														"nodeType": "VariableDeclaration",
														"scope": 122,
														"src": "1574:25:1",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 101,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 100,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 77,
																"src": "1574:14:1"
															},
															"referencedDeclaration": 77,
															"src": "1574:14:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 105,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 103,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 89,
														"src": "1602:14:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$77_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 104,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1602:16:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1574:44:1"
											},
											{
												"assignments": [
													107
												],
												"declarations": [
													{
														"constant": false,
														"id": 107,
														"mutability": "mutable",
														"name": "previousOwner",
														"nameLocation": "1632:13:1",
														"nodeType": "VariableDeclaration",
														"scope": 122,
														"src": "1624:21:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														"typeName": {
															"id": 106,
															"name": "address",
															"nodeType": "ElementaryTypeName",
															"src": "1624:7:1",
															"stateMutability": "nonpayable",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 110,
												"initialValue": {
													"expression": {
														"id": 108,
														"name": "ds",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 102,
														"src": "1648:2:1",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage storage pointer"
														}
													},
													"id": 109,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "contractOwner",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 76,
													"src": "1648:16:1",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1624:40:1"
											},
											{
												"expression": {
													"id": 115,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 111,
															"name": "ds",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 102,
															"src": "1670:2:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage storage pointer"
															}
														},
														"id": 113,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "contractOwner",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 76,
														"src": "1670:16:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 114,
														"name": "_newOwner",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 97,
														"src": "1689:9:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "1670:28:1",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 116,
												"nodeType": "ExpressionStatement",
												"src": "1670:28:1"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 118,
															"name": "previousOwner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 107,
															"src": "1730:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 119,
															"name": "_newOwner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 97,
															"src": "1745:9:1",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 117,
														"name": "OwnershipTransferred",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 95,
														"src": "1709:20:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
															"typeString": "function (address,address)"
														}
													},
													"id": 120,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1709:46:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 121,
												"nodeType": "EmitStatement",
												"src": "1704:51:1"
											}
										]
									},
									"id": 123,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "setContractOwner",
									"nameLocation": "1523:16:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 98,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 97,
												"mutability": "mutable",
												"name": "_newOwner",
												"nameLocation": "1548:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 123,
												"src": "1540:17:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 96,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1540:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1539:19:1"
									},
									"returnParameters": {
										"id": 99,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1568:0:1"
									},
									"scope": 871,
									"src": "1514:246:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 134,
										"nodeType": "Block",
										"src": "1836:58:1",
										"statements": [
											{
												"expression": {
													"id": 132,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 128,
														"name": "contractOwner_",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 126,
														"src": "1842:14:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"expression": {
															"arguments": [],
															"expression": {
																"argumentTypes": [],
																"id": 129,
																"name": "diamondStorage",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 89,
																"src": "1859:14:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$77_storage_ptr_$",
																	"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
																}
															},
															"id": 130,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "1859:16:1",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage storage pointer"
															}
														},
														"id": 131,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "contractOwner",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 76,
														"src": "1859:30:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "1842:47:1",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 133,
												"nodeType": "ExpressionStatement",
												"src": "1842:47:1"
											}
										]
									},
									"id": 135,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "contractOwner",
									"nameLocation": "1773:13:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 124,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1786:2:1"
									},
									"returnParameters": {
										"id": 127,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 126,
												"mutability": "mutable",
												"name": "contractOwner_",
												"nameLocation": "1820:14:1",
												"nodeType": "VariableDeclaration",
												"scope": 135,
												"src": "1812:22:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 125,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1812:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1811:24:1"
									},
									"scope": 871,
									"src": "1764:130:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 148,
										"nodeType": "Block",
										"src": "1946:102:1",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 144,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 139,
																	"name": "msg",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967281,
																	"src": "1960:3:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_message",
																		"typeString": "msg"
																	}
																},
																"id": 140,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "sender",
																"nodeType": "MemberAccess",
																"src": "1960:10:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"expression": {
																	"arguments": [],
																	"expression": {
																		"argumentTypes": [],
																		"id": 141,
																		"name": "diamondStorage",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 89,
																		"src": "1974:14:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$77_storage_ptr_$",
																			"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
																		}
																	},
																	"id": 142,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "1974:16:1",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 143,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "contractOwner",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 76,
																"src": "1974:30:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "1960:44:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e6572",
															"id": 145,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2006:36:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac",
																"typeString": "literal_string \"LibDiamond: Must be contract owner\""
															},
															"value": "LibDiamond: Must be contract owner"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac",
																"typeString": "literal_string \"LibDiamond: Must be contract owner\""
															}
														],
														"id": 138,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1952:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 146,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1952:91:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 147,
												"nodeType": "ExpressionStatement",
												"src": "1952:91:1"
											}
										]
									},
									"id": 149,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "enforceIsContractOwner",
									"nameLocation": "1907:22:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 136,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1929:2:1"
									},
									"returnParameters": {
										"id": 137,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1946:0:1"
									},
									"scope": 871,
									"src": "1898:150:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"anonymous": false,
									"id": 159,
									"name": "DiamondCut",
									"nameLocation": "2058:10:1",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 158,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 153,
												"indexed": false,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "2092:11:1",
												"nodeType": "VariableDeclaration",
												"scope": 159,
												"src": "2069:34:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 151,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 150,
															"name": "IDiamondCut.FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 14,
															"src": "2069:20:1"
														},
														"referencedDeclaration": 14,
														"src": "2069:20:1",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$14_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 152,
													"nodeType": "ArrayTypeName",
													"src": "2069:22:1",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 155,
												"indexed": false,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "2113:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 159,
												"src": "2105:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 154,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2105:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 157,
												"indexed": false,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "2126:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 159,
												"src": "2120:15:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 156,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "2120:5:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2068:68:1"
									},
									"src": "2052:85:1"
								},
								{
									"body": {
										"id": 262,
										"nodeType": "Block",
										"src": "2313:840:1",
										"statements": [
											{
												"body": {
													"id": 249,
													"nodeType": "Block",
													"src": "2391:662:1",
													"statements": [
														{
															"assignments": [
																184
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 184,
																	"mutability": "mutable",
																	"name": "action",
																	"nameLocation": "2426:6:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 249,
																	"src": "2399:33:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$5",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	},
																	"typeName": {
																		"id": 183,
																		"nodeType": "UserDefinedTypeName",
																		"pathNode": {
																			"id": 182,
																			"name": "IDiamondCut.FacetCutAction",
																			"nodeType": "IdentifierPath",
																			"referencedDeclaration": 5,
																			"src": "2399:26:1"
																		},
																		"referencedDeclaration": 5,
																		"src": "2399:26:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$5",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 189,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"id": 185,
																		"name": "_diamondCut",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 163,
																		"src": "2435:11:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																			"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																		}
																	},
																	"id": 187,
																	"indexExpression": {
																		"id": 186,
																		"name": "facetIndex",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 171,
																		"src": "2447:10:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "2435:23:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																		"typeString": "struct IDiamondCut.FacetCut memory"
																	}
																},
																"id": 188,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "action",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 10,
																"src": "2435:30:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_enum$_FacetCutAction_$5",
																	"typeString": "enum IDiamondCut.FacetCutAction"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "2399:66:1"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_enum$_FacetCutAction_$5",
																	"typeString": "enum IDiamondCut.FacetCutAction"
																},
																"id": 194,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 190,
																	"name": "action",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 184,
																	"src": "2477:6:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$5",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "==",
																"rightExpression": {
																	"expression": {
																		"expression": {
																			"id": 191,
																			"name": "IDiamondCut",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 37,
																			"src": "2487:11:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_contract$_IDiamondCut_$37_$",
																				"typeString": "type(contract IDiamondCut)"
																			}
																		},
																		"id": 192,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "FacetCutAction",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 5,
																		"src": "2487:26:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_enum$_FacetCutAction_$5_$",
																			"typeString": "type(enum IDiamondCut.FacetCutAction)"
																		}
																	},
																	"id": 193,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "Add",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 2,
																	"src": "2487:30:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$5",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	}
																},
																"src": "2477:40:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"falseBody": {
																"condition": {
																	"commonType": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$5",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	},
																	"id": 211,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"id": 207,
																		"name": "action",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 184,
																		"src": "2641:6:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$5",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": "==",
																	"rightExpression": {
																		"expression": {
																			"expression": {
																				"id": 208,
																				"name": "IDiamondCut",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 37,
																				"src": "2651:11:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_contract$_IDiamondCut_$37_$",
																					"typeString": "type(contract IDiamondCut)"
																				}
																			},
																			"id": 209,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "FacetCutAction",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 5,
																			"src": "2651:26:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_enum$_FacetCutAction_$5_$",
																				"typeString": "type(enum IDiamondCut.FacetCutAction)"
																			}
																		},
																		"id": 210,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"memberName": "Replace",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 3,
																		"src": "2651:34:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$5",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		}
																	},
																	"src": "2641:44:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"falseBody": {
																	"condition": {
																		"commonType": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$5",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		},
																		"id": 228,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 224,
																			"name": "action",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 184,
																			"src": "2813:6:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_enum$_FacetCutAction_$5",
																				"typeString": "enum IDiamondCut.FacetCutAction"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"expression": {
																				"expression": {
																					"id": 225,
																					"name": "IDiamondCut",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 37,
																					"src": "2823:11:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_type$_t_contract$_IDiamondCut_$37_$",
																						"typeString": "type(contract IDiamondCut)"
																					}
																				},
																				"id": 226,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "FacetCutAction",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 5,
																				"src": "2823:26:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_enum$_FacetCutAction_$5_$",
																					"typeString": "type(enum IDiamondCut.FacetCutAction)"
																				}
																			},
																			"id": 227,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"memberName": "Remove",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 4,
																			"src": "2823:33:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_enum$_FacetCutAction_$5",
																				"typeString": "enum IDiamondCut.FacetCutAction"
																			}
																		},
																		"src": "2813:43:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	"falseBody": {
																		"id": 245,
																		"nodeType": "Block",
																		"src": "2979:68:1",
																		"statements": [
																			{
																				"expression": {
																					"arguments": [
																						{
																							"hexValue": "4c69624469616d6f6e644375743a20496e636f7272656374204661636574437574416374696f6e",
																							"id": 242,
																							"isConstant": false,
																							"isLValue": false,
																							"isPure": true,
																							"kind": "string",
																							"lValueRequested": false,
																							"nodeType": "Literal",
																							"src": "2996:41:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54",
																								"typeString": "literal_string \"LibDiamondCut: Incorrect FacetCutAction\""
																							},
																							"value": "LibDiamondCut: Incorrect FacetCutAction"
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54",
																								"typeString": "literal_string \"LibDiamondCut: Incorrect FacetCutAction\""
																							}
																						],
																						"id": 241,
																						"name": "revert",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [
																							4294967277,
																							4294967277
																						],
																						"referencedDeclaration": 4294967277,
																						"src": "2989:6:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																							"typeString": "function (string memory) pure"
																						}
																					},
																					"id": 243,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "functionCall",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "2989:49:1",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_tuple$__$",
																						"typeString": "tuple()"
																					}
																				},
																				"id": 244,
																				"nodeType": "ExpressionStatement",
																				"src": "2989:49:1"
																			}
																		]
																	},
																	"id": 246,
																	"nodeType": "IfStatement",
																	"src": "2809:238:1",
																	"trueBody": {
																		"id": 240,
																		"nodeType": "Block",
																		"src": "2858:115:1",
																		"statements": [
																			{
																				"expression": {
																					"arguments": [
																						{
																							"expression": {
																								"baseExpression": {
																									"id": 230,
																									"name": "_diamondCut",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 163,
																									"src": "2884:11:1",
																									"typeDescriptions": {
																										"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																										"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																									}
																								},
																								"id": 232,
																								"indexExpression": {
																									"id": 231,
																									"name": "facetIndex",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 171,
																									"src": "2896:10:1",
																									"typeDescriptions": {
																										"typeIdentifier": "t_uint256",
																										"typeString": "uint256"
																									}
																								},
																								"isConstant": false,
																								"isLValue": true,
																								"isPure": false,
																								"lValueRequested": false,
																								"nodeType": "IndexAccess",
																								"src": "2884:23:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory"
																								}
																							},
																							"id": 233,
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"memberName": "facetAddress",
																							"nodeType": "MemberAccess",
																							"referencedDeclaration": 7,
																							"src": "2884:36:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_address",
																								"typeString": "address"
																							}
																						},
																						{
																							"expression": {
																								"baseExpression": {
																									"id": 234,
																									"name": "_diamondCut",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 163,
																									"src": "2922:11:1",
																									"typeDescriptions": {
																										"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																										"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																									}
																								},
																								"id": 236,
																								"indexExpression": {
																									"id": 235,
																									"name": "facetIndex",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 171,
																									"src": "2934:10:1",
																									"typeDescriptions": {
																										"typeIdentifier": "t_uint256",
																										"typeString": "uint256"
																									}
																								},
																								"isConstant": false,
																								"isLValue": true,
																								"isPure": false,
																								"lValueRequested": false,
																								"nodeType": "IndexAccess",
																								"src": "2922:23:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory"
																								}
																							},
																							"id": 237,
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"memberName": "functionSelectors",
																							"nodeType": "MemberAccess",
																							"referencedDeclaration": 13,
																							"src": "2922:41:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																								"typeString": "bytes4[] memory"
																							}
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_address",
																								"typeString": "address"
																							},
																							{
																								"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																								"typeString": "bytes4[] memory"
																							}
																						],
																						"id": 229,
																						"name": "removeFunctions",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 533,
																						"src": "2868:15:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$",
																							"typeString": "function (address,bytes4[] memory)"
																						}
																					},
																					"id": 238,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "functionCall",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "2868:96:1",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_tuple$__$",
																						"typeString": "tuple()"
																					}
																				},
																				"id": 239,
																				"nodeType": "ExpressionStatement",
																				"src": "2868:96:1"
																			}
																		]
																	}
																},
																"id": 247,
																"nodeType": "IfStatement",
																"src": "2637:410:1",
																"trueBody": {
																	"id": 223,
																	"nodeType": "Block",
																	"src": "2687:116:1",
																	"statements": [
																		{
																			"expression": {
																				"arguments": [
																					{
																						"expression": {
																							"baseExpression": {
																								"id": 213,
																								"name": "_diamondCut",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 163,
																								"src": "2714:11:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																								}
																							},
																							"id": 215,
																							"indexExpression": {
																								"id": 214,
																								"name": "facetIndex",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 171,
																								"src": "2726:10:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_uint256",
																									"typeString": "uint256"
																								}
																							},
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"nodeType": "IndexAccess",
																							"src": "2714:23:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory"
																							}
																						},
																						"id": 216,
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"memberName": "facetAddress",
																						"nodeType": "MemberAccess",
																						"referencedDeclaration": 7,
																						"src": "2714:36:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					{
																						"expression": {
																							"baseExpression": {
																								"id": 217,
																								"name": "_diamondCut",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 163,
																								"src": "2752:11:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																								}
																							},
																							"id": 219,
																							"indexExpression": {
																								"id": 218,
																								"name": "facetIndex",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 171,
																								"src": "2764:10:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_uint256",
																									"typeString": "uint256"
																								}
																							},
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"nodeType": "IndexAccess",
																							"src": "2752:23:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory"
																							}
																						},
																						"id": 220,
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"memberName": "functionSelectors",
																						"nodeType": "MemberAccess",
																						"referencedDeclaration": 13,
																						"src": "2752:41:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																							"typeString": "bytes4[] memory"
																						}
																					}
																				],
																				"expression": {
																					"argumentTypes": [
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						},
																						{
																							"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																							"typeString": "bytes4[] memory"
																						}
																					],
																					"id": 212,
																					"name": "replaceFunctions",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 468,
																					"src": "2697:16:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$",
																						"typeString": "function (address,bytes4[] memory)"
																					}
																				},
																				"id": 221,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"kind": "functionCall",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "2697:97:1",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_tuple$__$",
																					"typeString": "tuple()"
																				}
																			},
																			"id": 222,
																			"nodeType": "ExpressionStatement",
																			"src": "2697:97:1"
																		}
																	]
																}
															},
															"id": 248,
															"nodeType": "IfStatement",
															"src": "2473:574:1",
															"trueBody": {
																"id": 206,
																"nodeType": "Block",
																"src": "2519:112:1",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"expression": {
																						"baseExpression": {
																							"id": 196,
																							"name": "_diamondCut",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 163,
																							"src": "2542:11:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																							}
																						},
																						"id": 198,
																						"indexExpression": {
																							"id": 197,
																							"name": "facetIndex",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 171,
																							"src": "2554:10:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_uint256",
																								"typeString": "uint256"
																							}
																						},
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"nodeType": "IndexAccess",
																						"src": "2542:23:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																							"typeString": "struct IDiamondCut.FacetCut memory"
																						}
																					},
																					"id": 199,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "facetAddress",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 7,
																					"src": "2542:36:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"expression": {
																						"baseExpression": {
																							"id": 200,
																							"name": "_diamondCut",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 163,
																							"src": "2580:11:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																							}
																						},
																						"id": 202,
																						"indexExpression": {
																							"id": 201,
																							"name": "facetIndex",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 171,
																							"src": "2592:10:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_uint256",
																								"typeString": "uint256"
																							}
																						},
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"nodeType": "IndexAccess",
																						"src": "2580:23:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_FacetCut_$14_memory_ptr",
																							"typeString": "struct IDiamondCut.FacetCut memory"
																						}
																					},
																					"id": 203,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "functionSelectors",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 13,
																					"src": "2580:41:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																						"typeString": "bytes4[] memory"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																						"typeString": "bytes4[] memory"
																					}
																				],
																				"id": 195,
																				"name": "addFunctions",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 364,
																				"src": "2529:12:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$",
																					"typeString": "function (address,bytes4[] memory)"
																				}
																			},
																			"id": 204,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "2529:93:1",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 205,
																		"nodeType": "ExpressionStatement",
																		"src": "2529:93:1"
																	}
																]
															}
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 176,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 173,
														"name": "facetIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 171,
														"src": "2344:10:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 174,
															"name": "_diamondCut",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 163,
															"src": "2357:11:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																"typeString": "struct IDiamondCut.FacetCut memory[] memory"
															}
														},
														"id": 175,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "2357:18:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2344:31:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 250,
												"initializationExpression": {
													"assignments": [
														171
													],
													"declarations": [
														{
															"constant": false,
															"id": 171,
															"mutability": "mutable",
															"name": "facetIndex",
															"nameLocation": "2332:10:1",
															"nodeType": "VariableDeclaration",
															"scope": 250,
															"src": "2324:18:1",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 170,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "2324:7:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 172,
													"nodeType": "VariableDeclarationStatement",
													"src": "2324:18:1"
												},
												"loopExpression": {
													"expression": {
														"id": 178,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "2377:12:1",
														"subExpression": {
															"id": 177,
															"name": "facetIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 171,
															"src": "2377:10:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 179,
													"nodeType": "ExpressionStatement",
													"src": "2377:12:1"
												},
												"nodeType": "ForStatement",
												"src": "2319:734:1"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 252,
															"name": "_diamondCut",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 163,
															"src": "3074:11:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																"typeString": "struct IDiamondCut.FacetCut memory[] memory"
															}
														},
														{
															"id": 253,
															"name": "_init",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 165,
															"src": "3087:5:1",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 254,
															"name": "_calldata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 167,
															"src": "3094:9:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
																"typeString": "struct IDiamondCut.FacetCut memory[] memory"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 251,
														"name": "DiamondCut",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 159,
														"src": "3063:10:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"
														}
													},
													"id": 255,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3063:41:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 256,
												"nodeType": "EmitStatement",
												"src": "3058:46:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 258,
															"name": "_init",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 165,
															"src": "3131:5:1",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 259,
															"name": "_calldata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 167,
															"src": "3138:9:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 257,
														"name": "initializeDiamondCut",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 851,
														"src": "3110:20:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (address,bytes memory)"
														}
													},
													"id": 260,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3110:38:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 261,
												"nodeType": "ExpressionStatement",
												"src": "3110:38:1"
											}
										]
									},
									"id": 263,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "diamondCut",
									"nameLocation": "2195:10:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 168,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 163,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "2241:11:1",
												"nodeType": "VariableDeclaration",
												"scope": 263,
												"src": "2211:41:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_memory_ptr_$dyn_memory_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 161,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 160,
															"name": "IDiamondCut.FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 14,
															"src": "2211:20:1"
														},
														"referencedDeclaration": 14,
														"src": "2211:20:1",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$14_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 162,
													"nodeType": "ArrayTypeName",
													"src": "2211:22:1",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$14_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 165,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "2266:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 263,
												"src": "2258:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 164,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2258:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 167,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "2290:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 263,
												"src": "2277:22:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 166,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "2277:5:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2205:98:1"
									},
									"returnParameters": {
										"id": 169,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2313:0:1"
									},
									"scope": 871,
									"src": "2186:967:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 363,
										"nodeType": "Block",
										"src": "3247:905:1",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 275,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 272,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 268,
																	"src": "3261:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 273,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "3261:25:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 274,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "3289:1:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "3261:29:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574",
															"id": 276,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3292:45:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															},
															"value": "LibDiamondCut: No selectors in facet to cut"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															}
														],
														"id": 271,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3253:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 277,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3253:85:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 278,
												"nodeType": "ExpressionStatement",
												"src": "3253:85:1"
											},
											{
												"assignments": [
													281
												],
												"declarations": [
													{
														"constant": false,
														"id": 281,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "3367:2:1",
														"nodeType": "VariableDeclaration",
														"scope": 363,
														"src": "3344:25:1",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 280,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 279,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 77,
																"src": "3344:14:1"
															},
															"referencedDeclaration": 77,
															"src": "3344:14:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 284,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 282,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 89,
														"src": "3372:14:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$77_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 283,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3372:16:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3344:44:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 291,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 286,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 265,
																"src": "3402:13:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 289,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "3427:1:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 288,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "3419:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 287,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "3419:7:1",
																		"typeDescriptions": {}
																	}
																},
																"id": 290,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "3419:10:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "3402:27:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062652061646472657373283029",
															"id": 292,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3431:46:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															},
															"value": "LibDiamondCut: Add facet can't be address(0)"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															}
														],
														"id": 285,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3394:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 293,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3394:84:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 294,
												"nodeType": "ExpressionStatement",
												"src": "3394:84:1"
											},
											{
												"assignments": [
													296
												],
												"declarations": [
													{
														"constant": false,
														"id": 296,
														"mutability": "mutable",
														"name": "selectorPosition",
														"nameLocation": "3491:16:1",
														"nodeType": "VariableDeclaration",
														"scope": 363,
														"src": "3484:23:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														},
														"typeName": {
															"id": 295,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "3484:6:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint96",
																"typeString": "uint96"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 306,
												"initialValue": {
													"arguments": [
														{
															"expression": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 299,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 281,
																			"src": "3517:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 300,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetFunctionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 67,
																		"src": "3517:25:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																			"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																		}
																	},
																	"id": 302,
																	"indexExpression": {
																		"id": 301,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 265,
																		"src": "3543:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "3517:40:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																		"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																	}
																},
																"id": 303,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "functionSelectors",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 54,
																"src": "3517:58:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																	"typeString": "bytes4[] storage ref"
																}
															},
															"id": 304,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "length",
															"nodeType": "MemberAccess",
															"src": "3517:65:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 298,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "3510:6:1",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint96_$",
															"typeString": "type(uint96)"
														},
														"typeName": {
															"id": 297,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "3510:6:1",
															"typeDescriptions": {}
														}
													},
													"id": 305,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3510:73:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3484:99:1"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													},
													"id": 309,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 307,
														"name": "selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 296,
														"src": "3643:16:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 308,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "3663:1:1",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "3643:21:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 316,
												"nodeType": "IfStatement",
												"src": "3639:69:1",
												"trueBody": {
													"id": 315,
													"nodeType": "Block",
													"src": "3666:42:1",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"id": 311,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 281,
																		"src": "3683:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 312,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 265,
																		"src": "3687:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 310,
																	"name": "addFacet",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 566,
																	"src": "3674:8:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$77_storage_ptr_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address)"
																	}
																},
																"id": 313,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "3674:27:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 314,
															"nodeType": "ExpressionStatement",
															"src": "3674:27:1"
														}
													]
												}
											},
											{
												"body": {
													"id": 361,
													"nodeType": "Block",
													"src": "3801:347:1",
													"statements": [
														{
															"assignments": [
																328
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 328,
																	"mutability": "mutable",
																	"name": "selector",
																	"nameLocation": "3816:8:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 361,
																	"src": "3809:15:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 327,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "3809:6:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 332,
															"initialValue": {
																"baseExpression": {
																	"id": 329,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 268,
																	"src": "3827:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 331,
																"indexExpression": {
																	"id": 330,
																	"name": "selectorIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 318,
																	"src": "3846:13:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "3827:33:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "3809:51:1"
														},
														{
															"assignments": [
																334
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 334,
																	"mutability": "mutable",
																	"name": "oldFacetAddress",
																	"nameLocation": "3876:15:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 361,
																	"src": "3868:23:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	"typeName": {
																		"id": 333,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "3868:7:1",
																		"stateMutability": "nonpayable",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 340,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 335,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 281,
																			"src": "3894:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 336,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "selectorToFacetAndPosition",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 62,
																		"src": "3894:29:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																			"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																		}
																	},
																	"id": 338,
																	"indexExpression": {
																		"id": 337,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 328,
																		"src": "3924:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "3894:39:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
																		"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																	}
																},
																"id": 339,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddress",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 48,
																"src": "3894:52:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "3868:78:1"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		"id": 347,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 342,
																			"name": "oldFacetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 334,
																			"src": "3962:15:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"arguments": [
																				{
																					"hexValue": "30",
																					"id": 345,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "3989:1:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_0_by_1",
																						"typeString": "int_const 0"
																					},
																					"value": "0"
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_rational_0_by_1",
																						"typeString": "int_const 0"
																					}
																				],
																				"id": 344,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "3981:7:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_address_$",
																					"typeString": "type(address)"
																				},
																				"typeName": {
																					"id": 343,
																					"name": "address",
																					"nodeType": "ElementaryTypeName",
																					"src": "3981:7:1",
																					"typeDescriptions": {}
																				}
																			},
																			"id": 346,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "typeConversion",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "3981:10:1",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"src": "3962:29:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6e207468617420616c726561647920657869737473",
																		"id": 348,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "3993:55:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700",
																			"typeString": "literal_string \"LibDiamondCut: Can't add function that already exists\""
																		},
																		"value": "LibDiamondCut: Can't add function that already exists"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700",
																			"typeString": "literal_string \"LibDiamondCut: Can't add function that already exists\""
																		}
																	],
																	"id": 341,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "3954:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 349,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "3954:95:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 350,
															"nodeType": "ExpressionStatement",
															"src": "3954:95:1"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 352,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 281,
																		"src": "4069:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 353,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 328,
																		"src": "4073:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	{
																		"id": 354,
																		"name": "selectorPosition",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 296,
																		"src": "4083:16:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		}
																	},
																	{
																		"id": 355,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 265,
																		"src": "4101:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		},
																		{
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 351,
																	"name": "addFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 607,
																	"src": "4057:11:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$77_storage_ptr_$_t_bytes4_$_t_uint96_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)"
																	}
																},
																"id": 356,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4057:58:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 357,
															"nodeType": "ExpressionStatement",
															"src": "4057:58:1"
														},
														{
															"expression": {
																"id": 359,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "++",
																"prefix": false,
																"src": "4123:18:1",
																"subExpression": {
																	"id": 358,
																	"name": "selectorPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 296,
																	"src": "4123:16:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"id": 360,
															"nodeType": "ExpressionStatement",
															"src": "4123:18:1"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 323,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 320,
														"name": "selectorIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 318,
														"src": "3741:13:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 321,
															"name": "_functionSelectors",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 268,
															"src": "3757:18:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																"typeString": "bytes4[] memory"
															}
														},
														"id": 322,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "3757:25:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "3741:41:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 362,
												"initializationExpression": {
													"assignments": [
														318
													],
													"declarations": [
														{
															"constant": false,
															"id": 318,
															"mutability": "mutable",
															"name": "selectorIndex",
															"nameLocation": "3726:13:1",
															"nodeType": "VariableDeclaration",
															"scope": 362,
															"src": "3718:21:1",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 317,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "3718:7:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 319,
													"nodeType": "VariableDeclarationStatement",
													"src": "3718:21:1"
												},
												"loopExpression": {
													"expression": {
														"id": 325,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "3784:15:1",
														"subExpression": {
															"id": 324,
															"name": "selectorIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 318,
															"src": "3784:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 326,
													"nodeType": "ExpressionStatement",
													"src": "3784:15:1"
												},
												"nodeType": "ForStatement",
												"src": "3713:435:1"
											}
										]
									},
									"id": 364,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "addFunctions",
									"nameLocation": "3166:12:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 269,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 265,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "3187:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 364,
												"src": "3179:21:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 264,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3179:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 268,
												"mutability": "mutable",
												"name": "_functionSelectors",
												"nameLocation": "3218:18:1",
												"nodeType": "VariableDeclaration",
												"scope": 364,
												"src": "3202:34:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
													"typeString": "bytes4[]"
												},
												"typeName": {
													"baseType": {
														"id": 266,
														"name": "bytes4",
														"nodeType": "ElementaryTypeName",
														"src": "3202:6:1",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes4",
															"typeString": "bytes4"
														}
													},
													"id": 267,
													"nodeType": "ArrayTypeName",
													"src": "3202:8:1",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
														"typeString": "bytes4[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3178:59:1"
									},
									"returnParameters": {
										"id": 270,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3247:0:1"
									},
									"scope": 871,
									"src": "3157:995:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 467,
										"nodeType": "Block",
										"src": "4250:964:1",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 376,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 373,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 369,
																	"src": "4264:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 374,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "4264:25:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 375,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "4292:1:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "4264:29:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574",
															"id": 377,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4295:45:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															},
															"value": "LibDiamondCut: No selectors in facet to cut"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															}
														],
														"id": 372,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "4256:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 378,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4256:85:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 379,
												"nodeType": "ExpressionStatement",
												"src": "4256:85:1"
											},
											{
												"assignments": [
													382
												],
												"declarations": [
													{
														"constant": false,
														"id": 382,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "4370:2:1",
														"nodeType": "VariableDeclaration",
														"scope": 467,
														"src": "4347:25:1",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 381,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 380,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 77,
																"src": "4347:14:1"
															},
															"referencedDeclaration": 77,
															"src": "4347:14:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 385,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 383,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 89,
														"src": "4375:14:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$77_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 384,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4375:16:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4347:44:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 392,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 387,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 366,
																"src": "4405:13:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 390,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "4430:1:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 389,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "4422:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 388,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "4422:7:1",
																		"typeDescriptions": {}
																	}
																},
																"id": 391,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4422:10:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "4405:27:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062652061646472657373283029",
															"id": 393,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4434:46:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															},
															"value": "LibDiamondCut: Add facet can't be address(0)"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															}
														],
														"id": 386,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "4397:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 394,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4397:84:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 395,
												"nodeType": "ExpressionStatement",
												"src": "4397:84:1"
											},
											{
												"assignments": [
													397
												],
												"declarations": [
													{
														"constant": false,
														"id": 397,
														"mutability": "mutable",
														"name": "selectorPosition",
														"nameLocation": "4494:16:1",
														"nodeType": "VariableDeclaration",
														"scope": 467,
														"src": "4487:23:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														},
														"typeName": {
															"id": 396,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "4487:6:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint96",
																"typeString": "uint96"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 407,
												"initialValue": {
													"arguments": [
														{
															"expression": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 400,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 382,
																			"src": "4520:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 401,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetFunctionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 67,
																		"src": "4520:25:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																			"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																		}
																	},
																	"id": 403,
																	"indexExpression": {
																		"id": 402,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 366,
																		"src": "4546:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "4520:40:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																		"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																	}
																},
																"id": 404,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "functionSelectors",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 54,
																"src": "4520:58:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																	"typeString": "bytes4[] storage ref"
																}
															},
															"id": 405,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "length",
															"nodeType": "MemberAccess",
															"src": "4520:65:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 399,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "4513:6:1",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint96_$",
															"typeString": "type(uint96)"
														},
														"typeName": {
															"id": 398,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "4513:6:1",
															"typeDescriptions": {}
														}
													},
													"id": 406,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4513:73:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4487:99:1"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													},
													"id": 410,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 408,
														"name": "selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 397,
														"src": "4646:16:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 409,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "4666:1:1",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "4646:21:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 417,
												"nodeType": "IfStatement",
												"src": "4642:69:1",
												"trueBody": {
													"id": 416,
													"nodeType": "Block",
													"src": "4669:42:1",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"id": 412,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 382,
																		"src": "4686:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 413,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 366,
																		"src": "4690:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 411,
																	"name": "addFacet",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 566,
																	"src": "4677:8:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$77_storage_ptr_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address)"
																	}
																},
																"id": 414,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4677:27:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 415,
															"nodeType": "ExpressionStatement",
															"src": "4677:27:1"
														}
													]
												}
											},
											{
												"body": {
													"id": 465,
													"nodeType": "Block",
													"src": "4804:406:1",
													"statements": [
														{
															"assignments": [
																429
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 429,
																	"mutability": "mutable",
																	"name": "selector",
																	"nameLocation": "4819:8:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 465,
																	"src": "4812:15:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 428,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "4812:6:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 433,
															"initialValue": {
																"baseExpression": {
																	"id": 430,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 369,
																	"src": "4830:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 432,
																"indexExpression": {
																	"id": 431,
																	"name": "selectorIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 419,
																	"src": "4849:13:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "4830:33:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "4812:51:1"
														},
														{
															"assignments": [
																435
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 435,
																	"mutability": "mutable",
																	"name": "oldFacetAddress",
																	"nameLocation": "4879:15:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 465,
																	"src": "4871:23:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	"typeName": {
																		"id": 434,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "4871:7:1",
																		"stateMutability": "nonpayable",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 441,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 436,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 382,
																			"src": "4897:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 437,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "selectorToFacetAndPosition",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 62,
																		"src": "4897:29:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																			"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																		}
																	},
																	"id": 439,
																	"indexExpression": {
																		"id": 438,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 429,
																		"src": "4927:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "4897:39:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
																		"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																	}
																},
																"id": 440,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddress",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 48,
																"src": "4897:52:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "4871:78:1"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		"id": 445,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 443,
																			"name": "oldFacetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 435,
																			"src": "4965:15:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "!=",
																		"rightExpression": {
																			"id": 444,
																			"name": "_facetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 366,
																			"src": "4984:13:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"src": "4965:32:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e6374696f6e20776974682073616d652066756e6374696f6e",
																		"id": 446,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "4999:58:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078",
																			"typeString": "literal_string \"LibDiamondCut: Can't replace function with same function\""
																		},
																		"value": "LibDiamondCut: Can't replace function with same function"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078",
																			"typeString": "literal_string \"LibDiamondCut: Can't replace function with same function\""
																		}
																	],
																	"id": 442,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "4957:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 447,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4957:101:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 448,
															"nodeType": "ExpressionStatement",
															"src": "4957:101:1"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 450,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 382,
																		"src": "5081:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 451,
																		"name": "oldFacetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 435,
																		"src": "5085:15:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 452,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 429,
																		"src": "5102:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	],
																	"id": 449,
																	"name": "removeFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 774,
																	"src": "5066:14:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$77_storage_ptr_$_t_address_$_t_bytes4_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address,bytes4)"
																	}
																},
																"id": 453,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5066:45:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 454,
															"nodeType": "ExpressionStatement",
															"src": "5066:45:1"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 456,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 382,
																		"src": "5131:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 457,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 429,
																		"src": "5135:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	{
																		"id": 458,
																		"name": "selectorPosition",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 397,
																		"src": "5145:16:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		}
																	},
																	{
																		"id": 459,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 366,
																		"src": "5163:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		},
																		{
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 455,
																	"name": "addFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 607,
																	"src": "5119:11:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$77_storage_ptr_$_t_bytes4_$_t_uint96_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)"
																	}
																},
																"id": 460,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5119:58:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 461,
															"nodeType": "ExpressionStatement",
															"src": "5119:58:1"
														},
														{
															"expression": {
																"id": 463,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "++",
																"prefix": false,
																"src": "5185:18:1",
																"subExpression": {
																	"id": 462,
																	"name": "selectorPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 397,
																	"src": "5185:16:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"id": 464,
															"nodeType": "ExpressionStatement",
															"src": "5185:18:1"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 424,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 421,
														"name": "selectorIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 419,
														"src": "4744:13:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 422,
															"name": "_functionSelectors",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 369,
															"src": "4760:18:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																"typeString": "bytes4[] memory"
															}
														},
														"id": 423,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "4760:25:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "4744:41:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 466,
												"initializationExpression": {
													"assignments": [
														419
													],
													"declarations": [
														{
															"constant": false,
															"id": 419,
															"mutability": "mutable",
															"name": "selectorIndex",
															"nameLocation": "4729:13:1",
															"nodeType": "VariableDeclaration",
															"scope": 466,
															"src": "4721:21:1",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 418,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "4721:7:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 420,
													"nodeType": "VariableDeclarationStatement",
													"src": "4721:21:1"
												},
												"loopExpression": {
													"expression": {
														"id": 426,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "4787:15:1",
														"subExpression": {
															"id": 425,
															"name": "selectorIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 419,
															"src": "4787:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 427,
													"nodeType": "ExpressionStatement",
													"src": "4787:15:1"
												},
												"nodeType": "ForStatement",
												"src": "4716:494:1"
											}
										]
									},
									"id": 468,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "replaceFunctions",
									"nameLocation": "4165:16:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 370,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 366,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "4190:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 468,
												"src": "4182:21:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 365,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4182:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 369,
												"mutability": "mutable",
												"name": "_functionSelectors",
												"nameLocation": "4221:18:1",
												"nodeType": "VariableDeclaration",
												"scope": 468,
												"src": "4205:34:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
													"typeString": "bytes4[]"
												},
												"typeName": {
													"baseType": {
														"id": 367,
														"name": "bytes4",
														"nodeType": "ElementaryTypeName",
														"src": "4205:6:1",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes4",
															"typeString": "bytes4"
														}
													},
													"id": 368,
													"nodeType": "ArrayTypeName",
													"src": "4205:8:1",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
														"typeString": "bytes4[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4181:59:1"
									},
									"returnParameters": {
										"id": 371,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4250:0:1"
									},
									"scope": 871,
									"src": "4156:1058:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 532,
										"nodeType": "Block",
										"src": "5311:605:1",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 480,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 477,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 473,
																	"src": "5325:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 478,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "5325:25:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 479,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "5353:1:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "5325:29:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574",
															"id": 481,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5356:45:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															},
															"value": "LibDiamondCut: No selectors in facet to cut"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															}
														],
														"id": 476,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5317:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 482,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5317:85:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 483,
												"nodeType": "ExpressionStatement",
												"src": "5317:85:1"
											},
											{
												"assignments": [
													486
												],
												"declarations": [
													{
														"constant": false,
														"id": 486,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "5431:2:1",
														"nodeType": "VariableDeclaration",
														"scope": 532,
														"src": "5408:25:1",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 485,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 484,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 77,
																"src": "5408:14:1"
															},
															"referencedDeclaration": 77,
															"src": "5408:14:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 489,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 487,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 89,
														"src": "5436:14:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$77_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 488,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5436:16:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "5408:44:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 496,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 491,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 470,
																"src": "5527:13:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 494,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "5552:1:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 493,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "5544:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 492,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "5544:7:1",
																		"typeDescriptions": {}
																	}
																},
																"id": 495,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5544:10:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "5527:27:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472657373206d7573742062652061646472657373283029",
															"id": 497,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5556:56:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4",
																"typeString": "literal_string \"LibDiamondCut: Remove facet address must be address(0)\""
															},
															"value": "LibDiamondCut: Remove facet address must be address(0)"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4",
																"typeString": "literal_string \"LibDiamondCut: Remove facet address must be address(0)\""
															}
														],
														"id": 490,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5519:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 498,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5519:94:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 499,
												"nodeType": "ExpressionStatement",
												"src": "5519:94:1"
											},
											{
												"body": {
													"id": 530,
													"nodeType": "Block",
													"src": "5707:205:1",
													"statements": [
														{
															"assignments": [
																511
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 511,
																	"mutability": "mutable",
																	"name": "selector",
																	"nameLocation": "5722:8:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 530,
																	"src": "5715:15:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 510,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "5715:6:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 515,
															"initialValue": {
																"baseExpression": {
																	"id": 512,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 473,
																	"src": "5733:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 514,
																"indexExpression": {
																	"id": 513,
																	"name": "selectorIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 501,
																	"src": "5752:13:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "5733:33:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "5715:51:1"
														},
														{
															"assignments": [
																517
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 517,
																	"mutability": "mutable",
																	"name": "oldFacetAddress",
																	"nameLocation": "5782:15:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 530,
																	"src": "5774:23:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	"typeName": {
																		"id": 516,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "5774:7:1",
																		"stateMutability": "nonpayable",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 523,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 518,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 486,
																			"src": "5800:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 519,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "selectorToFacetAndPosition",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 62,
																		"src": "5800:29:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																			"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																		}
																	},
																	"id": 521,
																	"indexExpression": {
																		"id": 520,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 511,
																		"src": "5830:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "5800:39:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
																		"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																	}
																},
																"id": 522,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddress",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 48,
																"src": "5800:52:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "5774:78:1"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 525,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 486,
																		"src": "5875:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 526,
																		"name": "oldFacetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 517,
																		"src": "5879:15:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 527,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 511,
																		"src": "5896:8:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	],
																	"id": 524,
																	"name": "removeFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 774,
																	"src": "5860:14:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$77_storage_ptr_$_t_address_$_t_bytes4_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address,bytes4)"
																	}
																},
																"id": 528,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5860:45:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 529,
															"nodeType": "ExpressionStatement",
															"src": "5860:45:1"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 506,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 503,
														"name": "selectorIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 501,
														"src": "5647:13:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 504,
															"name": "_functionSelectors",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 473,
															"src": "5663:18:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																"typeString": "bytes4[] memory"
															}
														},
														"id": 505,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "5663:25:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "5647:41:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 531,
												"initializationExpression": {
													"assignments": [
														501
													],
													"declarations": [
														{
															"constant": false,
															"id": 501,
															"mutability": "mutable",
															"name": "selectorIndex",
															"nameLocation": "5632:13:1",
															"nodeType": "VariableDeclaration",
															"scope": 531,
															"src": "5624:21:1",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 500,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "5624:7:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 502,
													"nodeType": "VariableDeclarationStatement",
													"src": "5624:21:1"
												},
												"loopExpression": {
													"expression": {
														"id": 508,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "5690:15:1",
														"subExpression": {
															"id": 507,
															"name": "selectorIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 501,
															"src": "5690:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 509,
													"nodeType": "ExpressionStatement",
													"src": "5690:15:1"
												},
												"nodeType": "ForStatement",
												"src": "5619:293:1"
											}
										]
									},
									"id": 533,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "removeFunctions",
									"nameLocation": "5227:15:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 474,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 470,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "5251:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 533,
												"src": "5243:21:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 469,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5243:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 473,
												"mutability": "mutable",
												"name": "_functionSelectors",
												"nameLocation": "5282:18:1",
												"nodeType": "VariableDeclaration",
												"scope": 533,
												"src": "5266:34:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
													"typeString": "bytes4[]"
												},
												"typeName": {
													"baseType": {
														"id": 471,
														"name": "bytes4",
														"nodeType": "ElementaryTypeName",
														"src": "5266:6:1",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes4",
															"typeString": "bytes4"
														}
													},
													"id": 472,
													"nodeType": "ArrayTypeName",
													"src": "5266:8:1",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
														"typeString": "bytes4[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5242:59:1"
									},
									"returnParameters": {
										"id": 475,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5311:0:1"
									},
									"scope": 871,
									"src": "5218:698:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 565,
										"nodeType": "Block",
										"src": "5997:225:1",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 542,
															"name": "_facetAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 538,
															"src": "6026:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465",
															"id": 543,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6041:38:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_846ccbeb9c32d4d40d2c1bf991251db6ab65744a2f52b273947cee088a65504b",
																"typeString": "literal_string \"LibDiamondCut: New facet has no code\""
															},
															"value": "LibDiamondCut: New facet has no code"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_stringliteral_846ccbeb9c32d4d40d2c1bf991251db6ab65744a2f52b273947cee088a65504b",
																"typeString": "literal_string \"LibDiamondCut: New facet has no code\""
															}
														],
														"id": 541,
														"name": "enforceHasContractCode",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 870,
														"src": "6003:22:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (address,string memory) view"
														}
													},
													"id": 544,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6003:77:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 545,
												"nodeType": "ExpressionStatement",
												"src": "6003:77:1"
											},
											{
												"expression": {
													"id": 555,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"baseExpression": {
																"expression": {
																	"id": 546,
																	"name": "ds",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 536,
																	"src": "6086:2:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 549,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetFunctionSelectors",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 67,
																"src": "6086:25:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																	"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																}
															},
															"id": 550,
															"indexExpression": {
																"id": 548,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 538,
																"src": "6112:13:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "6086:40:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
															}
														},
														"id": 551,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "facetAddressPosition",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 56,
														"src": "6086:61:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"expression": {
															"expression": {
																"id": 552,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 536,
																"src": "6150:2:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 553,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "facetAddresses",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 70,
															"src": "6150:17:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 554,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "6150:24:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "6086:88:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 556,
												"nodeType": "ExpressionStatement",
												"src": "6086:88:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 562,
															"name": "_facetAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 538,
															"src": "6203:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"expression": {
																"id": 557,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 536,
																"src": "6180:2:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 560,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "facetAddresses",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 70,
															"src": "6180:17:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 561,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "push",
														"nodeType": "MemberAccess",
														"src": "6180:22:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
															"typeString": "function (address[] storage pointer,address)"
														}
													},
													"id": 563,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6180:37:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 564,
												"nodeType": "ExpressionStatement",
												"src": "6180:37:1"
											}
										]
									},
									"id": 566,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "addFacet",
									"nameLocation": "5929:8:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 539,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 536,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "5961:2:1",
												"nodeType": "VariableDeclaration",
												"scope": 566,
												"src": "5938:25:1",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 535,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 534,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "5938:14:1"
													},
													"referencedDeclaration": 77,
													"src": "5938:14:1",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 538,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "5973:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 566,
												"src": "5965:21:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 537,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5965:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5937:50:1"
									},
									"returnParameters": {
										"id": 540,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5997:0:1"
									},
									"scope": 871,
									"src": "5920:302:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 606,
										"nodeType": "Block",
										"src": "6370:251:1",
										"statements": [
											{
												"expression": {
													"id": 585,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"baseExpression": {
																"expression": {
																	"id": 578,
																	"name": "ds",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 569,
																	"src": "6376:2:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 581,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "selectorToFacetAndPosition",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 62,
																"src": "6376:29:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																	"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																}
															},
															"id": 582,
															"indexExpression": {
																"id": 580,
																"name": "_selector",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 571,
																"src": "6406:9:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "6376:40:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
																"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
															}
														},
														"id": 583,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "functionSelectorPosition",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 50,
														"src": "6376:65:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 584,
														"name": "_selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 573,
														"src": "6444:17:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"src": "6376:85:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"id": 586,
												"nodeType": "ExpressionStatement",
												"src": "6376:85:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 594,
															"name": "_selector",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 571,
															"src": "6531:9:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														],
														"expression": {
															"expression": {
																"baseExpression": {
																	"expression": {
																		"id": 587,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 569,
																		"src": "6467:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	"id": 590,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "facetFunctionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 67,
																	"src": "6467:25:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																		"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																	}
																},
																"id": 591,
																"indexExpression": {
																	"id": 589,
																	"name": "_facetAddress",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 575,
																	"src": "6493:13:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "6467:40:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																	"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																}
															},
															"id": 592,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "functionSelectors",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 54,
															"src": "6467:58:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																"typeString": "bytes4[] storage ref"
															}
														},
														"id": 593,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "push",
														"nodeType": "MemberAccess",
														"src": "6467:63:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$_t_bytes4_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$",
															"typeString": "function (bytes4[] storage pointer,bytes4)"
														}
													},
													"id": 595,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6467:74:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 596,
												"nodeType": "ExpressionStatement",
												"src": "6467:74:1"
											},
											{
												"expression": {
													"id": 604,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"baseExpression": {
																"expression": {
																	"id": 597,
																	"name": "ds",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 569,
																	"src": "6547:2:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 600,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "selectorToFacetAndPosition",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 62,
																"src": "6547:29:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																	"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																}
															},
															"id": 601,
															"indexExpression": {
																"id": 599,
																"name": "_selector",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 571,
																"src": "6577:9:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "6547:40:1",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
																"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
															}
														},
														"id": 602,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "facetAddress",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 48,
														"src": "6547:53:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 603,
														"name": "_facetAddress",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 575,
														"src": "6603:13:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "6547:69:1",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 605,
												"nodeType": "ExpressionStatement",
												"src": "6547:69:1"
											}
										]
									},
									"id": 607,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "addFunction",
									"nameLocation": "6235:11:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 576,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 569,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "6275:2:1",
												"nodeType": "VariableDeclaration",
												"scope": 607,
												"src": "6252:25:1",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 568,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 567,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "6252:14:1"
													},
													"referencedDeclaration": 77,
													"src": "6252:14:1",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 571,
												"mutability": "mutable",
												"name": "_selector",
												"nameLocation": "6290:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 607,
												"src": "6283:16:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes4",
													"typeString": "bytes4"
												},
												"typeName": {
													"id": 570,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "6283:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 573,
												"mutability": "mutable",
												"name": "_selectorPosition",
												"nameLocation": "6312:17:1",
												"nodeType": "VariableDeclaration",
												"scope": 607,
												"src": "6305:24:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint96",
													"typeString": "uint96"
												},
												"typeName": {
													"id": 572,
													"name": "uint96",
													"nodeType": "ElementaryTypeName",
													"src": "6305:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 575,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "6343:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 607,
												"src": "6335:21:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 574,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6335:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6246:114:1"
									},
									"returnParameters": {
										"id": 577,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "6370:0:1"
									},
									"scope": 871,
									"src": "6226:395:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 773,
										"nodeType": "Block",
										"src": "6742:1935:1",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 623,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 618,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 612,
																"src": "6756:13:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 621,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "6781:1:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 620,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "6773:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 619,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "6773:7:1",
																		"typeDescriptions": {}
																	}
																},
																"id": 622,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6773:10:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "6756:27:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6374696f6e207468617420646f65736e2774206578697374",
															"id": 624,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6785:57:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71",
																"typeString": "literal_string \"LibDiamondCut: Can't remove function that doesn't exist\""
															},
															"value": "LibDiamondCut: Can't remove function that doesn't exist"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71",
																"typeString": "literal_string \"LibDiamondCut: Can't remove function that doesn't exist\""
															}
														],
														"id": 617,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6748:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 625,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6748:95:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 626,
												"nodeType": "ExpressionStatement",
												"src": "6748:95:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 633,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 628,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 612,
																"src": "6930:13:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"id": 631,
																		"name": "this",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967268,
																		"src": "6955:4:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_LibDiamond_$871",
																			"typeString": "library LibDiamond"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_LibDiamond_$871",
																			"typeString": "library LibDiamond"
																		}
																	],
																	"id": 630,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "6947:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 629,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "6947:7:1",
																		"typeDescriptions": {}
																	}
																},
																"id": 632,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6947:13:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "6930:30:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d757461626c652066756e6374696f6e",
															"id": 634,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6962:48:1",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21",
																"typeString": "literal_string \"LibDiamondCut: Can't remove immutable function\""
															},
															"value": "LibDiamondCut: Can't remove immutable function"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21",
																"typeString": "literal_string \"LibDiamondCut: Can't remove immutable function\""
															}
														],
														"id": 627,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6922:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 635,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6922:89:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 636,
												"nodeType": "ExpressionStatement",
												"src": "6922:89:1"
											},
											{
												"assignments": [
													638
												],
												"declarations": [
													{
														"constant": false,
														"id": 638,
														"mutability": "mutable",
														"name": "selectorPosition",
														"nameLocation": "7095:16:1",
														"nodeType": "VariableDeclaration",
														"scope": 773,
														"src": "7087:24:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 637,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "7087:7:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 644,
												"initialValue": {
													"expression": {
														"baseExpression": {
															"expression": {
																"id": 639,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 610,
																"src": "7114:2:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 640,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "selectorToFacetAndPosition",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 62,
															"src": "7114:29:1",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
															}
														},
														"id": 642,
														"indexExpression": {
															"id": 641,
															"name": "_selector",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 614,
															"src": "7144:9:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "7114:40:1",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
															"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
														}
													},
													"id": 643,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "functionSelectorPosition",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 50,
													"src": "7114:65:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "7087:92:1"
											},
											{
												"assignments": [
													646
												],
												"declarations": [
													{
														"constant": false,
														"id": 646,
														"mutability": "mutable",
														"name": "lastSelectorPosition",
														"nameLocation": "7193:20:1",
														"nodeType": "VariableDeclaration",
														"scope": 773,
														"src": "7185:28:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 645,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "7185:7:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 655,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 654,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"expression": {
																"baseExpression": {
																	"expression": {
																		"id": 647,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 610,
																		"src": "7216:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	"id": 648,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "facetFunctionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 67,
																	"src": "7216:25:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																		"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																	}
																},
																"id": 650,
																"indexExpression": {
																	"id": 649,
																	"name": "_facetAddress",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 612,
																	"src": "7242:13:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "7216:40:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																	"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																}
															},
															"id": 651,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "functionSelectors",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 54,
															"src": "7216:58:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																"typeString": "bytes4[] storage ref"
															}
														},
														"id": 652,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "7216:65:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "-",
													"rightExpression": {
														"hexValue": "31",
														"id": 653,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "7284:1:1",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_1_by_1",
															"typeString": "int_const 1"
														},
														"value": "1"
													},
													"src": "7216:69:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "7185:100:1"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 658,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 656,
														"name": "selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 638,
														"src": "7359:16:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "!=",
													"rightExpression": {
														"id": 657,
														"name": "lastSelectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 646,
														"src": "7379:20:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "7359:40:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 693,
												"nodeType": "IfStatement",
												"src": "7355:365:1",
												"trueBody": {
													"id": 692,
													"nodeType": "Block",
													"src": "7401:319:1",
													"statements": [
														{
															"assignments": [
																660
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 660,
																	"mutability": "mutable",
																	"name": "lastSelector",
																	"nameLocation": "7416:12:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 692,
																	"src": "7409:19:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 659,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "7409:6:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 668,
															"initialValue": {
																"baseExpression": {
																	"expression": {
																		"baseExpression": {
																			"expression": {
																				"id": 661,
																				"name": "ds",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 610,
																				"src": "7431:2:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																					"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																				}
																			},
																			"id": 662,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "facetFunctionSelectors",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 67,
																			"src": "7431:25:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																				"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																			}
																		},
																		"id": 664,
																		"indexExpression": {
																			"id": 663,
																			"name": "_facetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 612,
																			"src": "7457:13:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "7431:40:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																			"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																		}
																	},
																	"id": 665,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "functionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 54,
																	"src": "7431:58:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																		"typeString": "bytes4[] storage ref"
																	}
																},
																"id": 667,
																"indexExpression": {
																	"id": 666,
																	"name": "lastSelectorPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 646,
																	"src": "7490:20:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "7431:80:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "7409:102:1"
														},
														{
															"expression": {
																"id": 678,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"baseExpression": {
																		"expression": {
																			"baseExpression": {
																				"expression": {
																					"id": 669,
																					"name": "ds",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 610,
																					"src": "7519:2:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																						"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																					}
																				},
																				"id": 672,
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "facetFunctionSelectors",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 67,
																				"src": "7519:25:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																					"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																				}
																			},
																			"id": 673,
																			"indexExpression": {
																				"id": 671,
																				"name": "_facetAddress",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 612,
																				"src": "7545:13:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			},
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "IndexAccess",
																			"src": "7519:40:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																				"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																			}
																		},
																		"id": 674,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "functionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 54,
																		"src": "7519:58:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																			"typeString": "bytes4[] storage ref"
																		}
																	},
																	"id": 676,
																	"indexExpression": {
																		"id": 675,
																		"name": "selectorPosition",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 638,
																		"src": "7578:16:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"nodeType": "IndexAccess",
																	"src": "7519:76:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"id": 677,
																	"name": "lastSelector",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 660,
																	"src": "7598:12:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																"src": "7519:91:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"id": 679,
															"nodeType": "ExpressionStatement",
															"src": "7519:91:1"
														},
														{
															"expression": {
																"id": 690,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"expression": {
																		"baseExpression": {
																			"expression": {
																				"id": 680,
																				"name": "ds",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 610,
																				"src": "7618:2:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																					"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																				}
																			},
																			"id": 683,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "selectorToFacetAndPosition",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 62,
																			"src": "7618:29:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																				"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																			}
																		},
																		"id": 684,
																		"indexExpression": {
																			"id": 682,
																			"name": "lastSelector",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 660,
																			"src": "7648:12:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bytes4",
																				"typeString": "bytes4"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "7618:43:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
																			"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																		}
																	},
																	"id": 685,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"memberName": "functionSelectorPosition",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 50,
																	"src": "7618:68:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"arguments": [
																		{
																			"id": 688,
																			"name": "selectorPosition",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 638,
																			"src": "7696:16:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		],
																		"id": 687,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "7689:6:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_uint96_$",
																			"typeString": "type(uint96)"
																		},
																		"typeName": {
																			"id": 686,
																			"name": "uint96",
																			"nodeType": "ElementaryTypeName",
																			"src": "7689:6:1",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 689,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "7689:24:1",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"src": "7618:95:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"id": 691,
															"nodeType": "ExpressionStatement",
															"src": "7618:95:1"
														}
													]
												}
											},
											{
												"expression": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"expression": {
															"expression": {
																"baseExpression": {
																	"expression": {
																		"id": 694,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 610,
																		"src": "7757:2:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	"id": 697,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "facetFunctionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 67,
																	"src": "7757:25:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																		"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																	}
																},
																"id": 698,
																"indexExpression": {
																	"id": 696,
																	"name": "_facetAddress",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 612,
																	"src": "7783:13:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "7757:40:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																	"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																}
															},
															"id": 699,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "functionSelectors",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 54,
															"src": "7757:58:1",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																"typeString": "bytes4[] storage ref"
															}
														},
														"id": 700,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "pop",
														"nodeType": "MemberAccess",
														"src": "7757:62:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$",
															"typeString": "function (bytes4[] storage pointer)"
														}
													},
													"id": 701,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7757:64:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 702,
												"nodeType": "ExpressionStatement",
												"src": "7757:64:1"
											},
											{
												"expression": {
													"id": 707,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "UnaryOperation",
													"operator": "delete",
													"prefix": true,
													"src": "7827:47:1",
													"subExpression": {
														"baseExpression": {
															"expression": {
																"id": 703,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 610,
																"src": "7834:2:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 704,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "selectorToFacetAndPosition",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 62,
															"src": "7834:29:1",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$51_storage_$",
																"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
															}
														},
														"id": 706,
														"indexExpression": {
															"id": 705,
															"name": "_selector",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 614,
															"src": "7864:9:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "7834:40:1",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetAddressAndPosition_$51_storage",
															"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 708,
												"nodeType": "ExpressionStatement",
												"src": "7827:47:1"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 711,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 709,
														"name": "lastSelectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 646,
														"src": "7961:20:1",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 710,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "7985:1:1",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "7961:25:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 772,
												"nodeType": "IfStatement",
												"src": "7957:716:1",
												"trueBody": {
													"id": 771,
													"nodeType": "Block",
													"src": "7988:685:1",
													"statements": [
														{
															"assignments": [
																713
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 713,
																	"mutability": "mutable",
																	"name": "lastFacetAddressPosition",
																	"nameLocation": "8089:24:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 771,
																	"src": "8081:32:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 712,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "8081:7:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 719,
															"initialValue": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 718,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"expression": {
																			"id": 714,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 610,
																			"src": "8116:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 715,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetAddresses",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 70,
																		"src": "8116:17:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 716,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "length",
																	"nodeType": "MemberAccess",
																	"src": "8116:24:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "-",
																"rightExpression": {
																	"hexValue": "31",
																	"id": 717,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "8143:1:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_1_by_1",
																		"typeString": "int_const 1"
																	},
																	"value": "1"
																},
																"src": "8116:28:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "8081:63:1"
														},
														{
															"assignments": [
																721
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 721,
																	"mutability": "mutable",
																	"name": "facetAddressPosition",
																	"nameLocation": "8160:20:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 771,
																	"src": "8152:28:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 720,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "8152:7:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 727,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 722,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 610,
																			"src": "8183:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 723,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetFunctionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 67,
																		"src": "8183:25:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																			"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																		}
																	},
																	"id": 725,
																	"indexExpression": {
																		"id": 724,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 612,
																		"src": "8209:13:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "8183:40:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																		"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																	}
																},
																"id": 726,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddressPosition",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 56,
																"src": "8183:61:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "8152:92:1"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 730,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 728,
																	"name": "facetAddressPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 721,
																	"src": "8256:20:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"id": 729,
																	"name": "lastFacetAddressPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 713,
																	"src": "8280:24:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "8256:48:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 756,
															"nodeType": "IfStatement",
															"src": "8252:308:1",
															"trueBody": {
																"id": 755,
																"nodeType": "Block",
																"src": "8306:254:1",
																"statements": [
																	{
																		"assignments": [
																			732
																		],
																		"declarations": [
																			{
																				"constant": false,
																				"id": 732,
																				"mutability": "mutable",
																				"name": "lastFacetAddress",
																				"nameLocation": "8324:16:1",
																				"nodeType": "VariableDeclaration",
																				"scope": 755,
																				"src": "8316:24:1",
																				"stateVariable": false,
																				"storageLocation": "default",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				},
																				"typeName": {
																					"id": 731,
																					"name": "address",
																					"nodeType": "ElementaryTypeName",
																					"src": "8316:7:1",
																					"stateMutability": "nonpayable",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				"visibility": "internal"
																			}
																		],
																		"id": 737,
																		"initialValue": {
																			"baseExpression": {
																				"expression": {
																					"id": 733,
																					"name": "ds",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 610,
																					"src": "8343:2:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																						"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																					}
																				},
																				"id": 734,
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "facetAddresses",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 70,
																				"src": "8343:17:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_array$_t_address_$dyn_storage",
																					"typeString": "address[] storage ref"
																				}
																			},
																			"id": 736,
																			"indexExpression": {
																				"id": 735,
																				"name": "lastFacetAddressPosition",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 713,
																				"src": "8361:24:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "IndexAccess",
																			"src": "8343:43:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"nodeType": "VariableDeclarationStatement",
																		"src": "8316:70:1"
																	},
																	{
																		"expression": {
																			"id": 744,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"baseExpression": {
																					"expression": {
																						"id": 738,
																						"name": "ds",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 610,
																						"src": "8396:2:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																							"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																						}
																					},
																					"id": 741,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "facetAddresses",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 70,
																					"src": "8396:17:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_array$_t_address_$dyn_storage",
																						"typeString": "address[] storage ref"
																					}
																				},
																				"id": 742,
																				"indexExpression": {
																					"id": 740,
																					"name": "facetAddressPosition",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 721,
																					"src": "8414:20:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": true,
																				"nodeType": "IndexAccess",
																				"src": "8396:39:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"id": 743,
																				"name": "lastFacetAddress",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 732,
																				"src": "8438:16:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			},
																			"src": "8396:58:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"id": 745,
																		"nodeType": "ExpressionStatement",
																		"src": "8396:58:1"
																	},
																	{
																		"expression": {
																			"id": 753,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"expression": {
																					"baseExpression": {
																						"expression": {
																							"id": 746,
																							"name": "ds",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 610,
																							"src": "8464:2:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																								"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																							}
																						},
																						"id": 749,
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"memberName": "facetFunctionSelectors",
																						"nodeType": "MemberAccess",
																						"referencedDeclaration": 67,
																						"src": "8464:25:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																							"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																						}
																					},
																					"id": 750,
																					"indexExpression": {
																						"id": 748,
																						"name": "lastFacetAddress",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 732,
																						"src": "8490:16:1",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"nodeType": "IndexAccess",
																					"src": "8464:43:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																						"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																					}
																				},
																				"id": 751,
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": true,
																				"memberName": "facetAddressPosition",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 56,
																				"src": "8464:64:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"id": 752,
																				"name": "facetAddressPosition",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 721,
																				"src": "8531:20:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "8464:87:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 754,
																		"nodeType": "ExpressionStatement",
																		"src": "8464:87:1"
																	}
																]
															}
														},
														{
															"expression": {
																"arguments": [],
																"expression": {
																	"argumentTypes": [],
																	"expression": {
																		"expression": {
																			"id": 757,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 610,
																			"src": "8567:2:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 760,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetAddresses",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 70,
																		"src": "8567:17:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 761,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "pop",
																	"nodeType": "MemberAccess",
																	"src": "8567:21:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
																		"typeString": "function (address[] storage pointer)"
																	}
																},
																"id": 762,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8567:23:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 763,
															"nodeType": "ExpressionStatement",
															"src": "8567:23:1"
														},
														{
															"expression": {
																"id": 769,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "delete",
																"prefix": true,
																"src": "8598:68:1",
																"subExpression": {
																	"expression": {
																		"baseExpression": {
																			"expression": {
																				"id": 764,
																				"name": "ds",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 610,
																				"src": "8605:2:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
																					"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																				}
																			},
																			"id": 765,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "facetFunctionSelectors",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 67,
																			"src": "8605:25:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$57_storage_$",
																				"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																			}
																		},
																		"id": 767,
																		"indexExpression": {
																			"id": 766,
																			"name": "_facetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 612,
																			"src": "8631:13:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "8605:40:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_FacetFunctionSelectors_$57_storage",
																			"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																		}
																	},
																	"id": 768,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"memberName": "facetAddressPosition",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 56,
																	"src": "8605:61:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 770,
															"nodeType": "ExpressionStatement",
															"src": "8598:68:1"
														}
													]
												}
											}
										]
									},
									"id": 774,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "removeFunction",
									"nameLocation": "6634:14:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 615,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 610,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "6677:2:1",
												"nodeType": "VariableDeclaration",
												"scope": 774,
												"src": "6654:25:1",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 609,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 608,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "6654:14:1"
													},
													"referencedDeclaration": 77,
													"src": "6654:14:1",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$77_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 612,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "6693:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 774,
												"src": "6685:21:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 611,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6685:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 614,
												"mutability": "mutable",
												"name": "_selector",
												"nameLocation": "6719:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 774,
												"src": "6712:16:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes4",
													"typeString": "bytes4"
												},
												"typeName": {
													"id": 613,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "6712:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6648:84:1"
									},
									"returnParameters": {
										"id": 616,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "6742:0:1"
									},
									"scope": 871,
									"src": "6625:2052:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 850,
										"nodeType": "Block",
										"src": "8759:732:1",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 786,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 781,
														"name": "_init",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 776,
														"src": "8769:5:1",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"arguments": [
															{
																"hexValue": "30",
																"id": 784,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "8786:1:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																}
															],
															"id": 783,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "8778:7:1",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_address_$",
																"typeString": "type(address)"
															},
															"typeName": {
																"id": 782,
																"name": "address",
																"nodeType": "ElementaryTypeName",
																"src": "8778:7:1",
																"typeDescriptions": {}
															}
														},
														"id": 785,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "8778:10:1",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "8769:19:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 848,
													"nodeType": "Block",
													"src": "8905:582:1",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 800,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"expression": {
																				"id": 797,
																				"name": "_calldata",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 778,
																				"src": "8921:9:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				}
																			},
																			"id": 798,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "length",
																			"nodeType": "MemberAccess",
																			"src": "8921:16:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": ">",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 799,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "8940:1:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "8921:20:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d70747920627574205f696e6974206973206e6f742061646472657373283029",
																		"id": 801,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "8943:63:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042",
																			"typeString": "literal_string \"LibDiamondCut: _calldata is empty but _init is not address(0)\""
																		},
																		"value": "LibDiamondCut: _calldata is empty but _init is not address(0)"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042",
																			"typeString": "literal_string \"LibDiamondCut: _calldata is empty but _init is not address(0)\""
																		}
																	],
																	"id": 796,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "8913:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 802,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8913:94:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 803,
															"nodeType": "ExpressionStatement",
															"src": "8913:94:1"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																"id": 809,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 804,
																	"name": "_init",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 776,
																	"src": "9019:5:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"arguments": [
																		{
																			"id": 807,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "9036:4:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_LibDiamond_$871",
																				"typeString": "library LibDiamond"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_LibDiamond_$871",
																				"typeString": "library LibDiamond"
																			}
																		],
																		"id": 806,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "9028:7:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 805,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "9028:7:1",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 808,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "9028:13:1",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"src": "9019:22:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 816,
															"nodeType": "IfStatement",
															"src": "9015:120:1",
															"trueBody": {
																"id": 815,
																"nodeType": "Block",
																"src": "9043:92:1",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 811,
																					"name": "_init",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 776,
																					"src": "9076:5:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"hexValue": "4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f6465",
																					"id": 812,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "string",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "9083:42:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_stringliteral_460f8f0920c649146ef02741816b1cf9ce4f02ea288ceb73adf027cefe9069a0",
																						"typeString": "literal_string \"LibDiamondCut: _init address has no code\""
																					},
																					"value": "LibDiamondCut: _init address has no code"
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_stringliteral_460f8f0920c649146ef02741816b1cf9ce4f02ea288ceb73adf027cefe9069a0",
																						"typeString": "literal_string \"LibDiamondCut: _init address has no code\""
																					}
																				],
																				"id": 810,
																				"name": "enforceHasContractCode",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 870,
																				"src": "9053:22:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_view$_t_address_$_t_string_memory_ptr_$returns$__$",
																					"typeString": "function (address,string memory) view"
																				}
																			},
																			"id": 813,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "9053:73:1",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 814,
																		"nodeType": "ExpressionStatement",
																		"src": "9053:73:1"
																	}
																]
															}
														},
														{
															"assignments": [
																818,
																820
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 818,
																	"mutability": "mutable",
																	"name": "success",
																	"nameLocation": "9205:7:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 848,
																	"src": "9200:12:1",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	},
																	"typeName": {
																		"id": 817,
																		"name": "bool",
																		"nodeType": "ElementaryTypeName",
																		"src": "9200:4:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	"visibility": "internal"
																},
																{
																	"constant": false,
																	"id": 820,
																	"mutability": "mutable",
																	"name": "error",
																	"nameLocation": "9227:5:1",
																	"nodeType": "VariableDeclaration",
																	"scope": 848,
																	"src": "9214:18:1",
																	"stateVariable": false,
																	"storageLocation": "memory",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes"
																	},
																	"typeName": {
																		"id": 819,
																		"name": "bytes",
																		"nodeType": "ElementaryTypeName",
																		"src": "9214:5:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes_storage_ptr",
																			"typeString": "bytes"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 825,
															"initialValue": {
																"arguments": [
																	{
																		"id": 823,
																		"name": "_calldata",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 778,
																		"src": "9255:9:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes_memory_ptr",
																			"typeString": "bytes memory"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bytes_memory_ptr",
																			"typeString": "bytes memory"
																		}
																	],
																	"expression": {
																		"id": 821,
																		"name": "_init",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 776,
																		"src": "9236:5:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"id": 822,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "delegatecall",
																	"nodeType": "MemberAccess",
																	"src": "9236:18:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
																		"typeString": "function (bytes memory) returns (bool,bytes memory)"
																	}
																},
																"id": 824,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "9236:29:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
																	"typeString": "tuple(bool,bytes memory)"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "9199:66:1"
														},
														{
															"condition": {
																"id": 827,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "!",
																"prefix": true,
																"src": "9277:8:1",
																"subExpression": {
																	"id": 826,
																	"name": "success",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 818,
																	"src": "9278:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 847,
															"nodeType": "IfStatement",
															"src": "9273:208:1",
															"trueBody": {
																"id": 846,
																"nodeType": "Block",
																"src": "9287:194:1",
																"statements": [
																	{
																		"condition": {
																			"commonType": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			},
																			"id": 831,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftExpression": {
																				"expression": {
																					"id": 828,
																					"name": "error",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 820,
																					"src": "9301:5:1",
																					"typeDescriptions": {
																						"typeIdentifier": "t_bytes_memory_ptr",
																						"typeString": "bytes memory"
																					}
																				},
																				"id": 829,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "length",
																				"nodeType": "MemberAccess",
																				"src": "9301:12:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "BinaryOperation",
																			"operator": ">",
																			"rightExpression": {
																				"hexValue": "30",
																				"id": 830,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"kind": "number",
																				"lValueRequested": false,
																				"nodeType": "Literal",
																				"src": "9316:1:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_rational_0_by_1",
																					"typeString": "int_const 0"
																				},
																				"value": "0"
																			},
																			"src": "9301:16:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bool",
																				"typeString": "bool"
																			}
																		},
																		"falseBody": {
																			"id": 844,
																			"nodeType": "Block",
																			"src": "9402:71:1",
																			"statements": [
																				{
																					"expression": {
																						"arguments": [
																							{
																								"hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265766572746564",
																								"id": 841,
																								"isConstant": false,
																								"isLValue": false,
																								"isPure": true,
																								"kind": "string",
																								"lValueRequested": false,
																								"nodeType": "Literal",
																								"src": "9421:40:1",
																								"typeDescriptions": {
																									"typeIdentifier": "t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d",
																									"typeString": "literal_string \"LibDiamondCut: _init function reverted\""
																								},
																								"value": "LibDiamondCut: _init function reverted"
																							}
																						],
																						"expression": {
																							"argumentTypes": [
																								{
																									"typeIdentifier": "t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d",
																									"typeString": "literal_string \"LibDiamondCut: _init function reverted\""
																								}
																							],
																							"id": 840,
																							"name": "revert",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [
																								4294967277,
																								4294967277
																							],
																							"referencedDeclaration": 4294967277,
																							"src": "9414:6:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																								"typeString": "function (string memory) pure"
																							}
																						},
																						"id": 842,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": false,
																						"kind": "functionCall",
																						"lValueRequested": false,
																						"names": [],
																						"nodeType": "FunctionCall",
																						"src": "9414:48:1",
																						"tryCall": false,
																						"typeDescriptions": {
																							"typeIdentifier": "t_tuple$__$",
																							"typeString": "tuple()"
																						}
																					},
																					"id": 843,
																					"nodeType": "ExpressionStatement",
																					"src": "9414:48:1"
																				}
																			]
																		},
																		"id": 845,
																		"nodeType": "IfStatement",
																		"src": "9297:176:1",
																		"trueBody": {
																			"id": 839,
																			"nodeType": "Block",
																			"src": "9319:77:1",
																			"statements": [
																				{
																					"expression": {
																						"arguments": [
																							{
																								"arguments": [
																									{
																										"id": 835,
																										"name": "error",
																										"nodeType": "Identifier",
																										"overloadedDeclarations": [],
																										"referencedDeclaration": 820,
																										"src": "9378:5:1",
																										"typeDescriptions": {
																											"typeIdentifier": "t_bytes_memory_ptr",
																											"typeString": "bytes memory"
																										}
																									}
																								],
																								"expression": {
																									"argumentTypes": [
																										{
																											"typeIdentifier": "t_bytes_memory_ptr",
																											"typeString": "bytes memory"
																										}
																									],
																									"id": 834,
																									"isConstant": false,
																									"isLValue": false,
																									"isPure": true,
																									"lValueRequested": false,
																									"nodeType": "ElementaryTypeNameExpression",
																									"src": "9371:6:1",
																									"typeDescriptions": {
																										"typeIdentifier": "t_type$_t_string_storage_ptr_$",
																										"typeString": "type(string storage pointer)"
																									},
																									"typeName": {
																										"id": 833,
																										"name": "string",
																										"nodeType": "ElementaryTypeName",
																										"src": "9371:6:1",
																										"typeDescriptions": {}
																									}
																								},
																								"id": 836,
																								"isConstant": false,
																								"isLValue": false,
																								"isPure": false,
																								"kind": "typeConversion",
																								"lValueRequested": false,
																								"names": [],
																								"nodeType": "FunctionCall",
																								"src": "9371:13:1",
																								"tryCall": false,
																								"typeDescriptions": {
																									"typeIdentifier": "t_string_memory_ptr",
																									"typeString": "string memory"
																								}
																							}
																						],
																						"expression": {
																							"argumentTypes": [
																								{
																									"typeIdentifier": "t_string_memory_ptr",
																									"typeString": "string memory"
																								}
																							],
																							"id": 832,
																							"name": "revert",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [
																								4294967277,
																								4294967277
																							],
																							"referencedDeclaration": 4294967277,
																							"src": "9364:6:1",
																							"typeDescriptions": {
																								"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																								"typeString": "function (string memory) pure"
																							}
																						},
																						"id": 837,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": false,
																						"kind": "functionCall",
																						"lValueRequested": false,
																						"names": [],
																						"nodeType": "FunctionCall",
																						"src": "9364:21:1",
																						"tryCall": false,
																						"typeDescriptions": {
																							"typeIdentifier": "t_tuple$__$",
																							"typeString": "tuple()"
																						}
																					},
																					"id": 838,
																					"nodeType": "ExpressionStatement",
																					"src": "9364:21:1"
																				}
																			]
																		}
																	}
																]
															}
														}
													]
												},
												"id": 849,
												"nodeType": "IfStatement",
												"src": "8765:722:1",
												"trueBody": {
													"id": 795,
													"nodeType": "Block",
													"src": "8790:109:1",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 791,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"expression": {
																				"id": 788,
																				"name": "_calldata",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 778,
																				"src": "8806:9:1",
																				"typeDescriptions": {
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				}
																			},
																			"id": 789,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "length",
																			"nodeType": "MemberAccess",
																			"src": "8806:16:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 790,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "8826:1:1",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "8806:21:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a205f696e69742069732061646472657373283029206275745f63616c6c64617461206973206e6f7420656d707479",
																		"id": 792,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "8829:62:1",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8",
																			"typeString": "literal_string \"LibDiamondCut: _init is address(0) but_calldata is not empty\""
																		},
																		"value": "LibDiamondCut: _init is address(0) but_calldata is not empty"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8",
																			"typeString": "literal_string \"LibDiamondCut: _init is address(0) but_calldata is not empty\""
																		}
																	],
																	"id": 787,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "8798:7:1",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 793,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8798:94:1",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 794,
															"nodeType": "ExpressionStatement",
															"src": "8798:94:1"
														}
													]
												}
											}
										]
									},
									"id": 851,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "initializeDiamondCut",
									"nameLocation": "8690:20:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 779,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 776,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "8719:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 851,
												"src": "8711:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 775,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "8711:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 778,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "8739:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 851,
												"src": "8726:22:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 777,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "8726:5:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8710:39:1"
									},
									"returnParameters": {
										"id": 780,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "8759:0:1"
									},
									"scope": 871,
									"src": "8681:810:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 869,
										"nodeType": "Block",
										"src": "9589:195:1",
										"statements": [
											{
												"assignments": [
													859
												],
												"declarations": [
													{
														"constant": false,
														"id": 859,
														"mutability": "mutable",
														"name": "contractSize",
														"nameLocation": "9603:12:1",
														"nodeType": "VariableDeclaration",
														"scope": 869,
														"src": "9595:20:1",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 858,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "9595:7:1",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 860,
												"nodeType": "VariableDeclarationStatement",
												"src": "9595:20:1"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "9682:52:1",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "9690:38:1",
															"value": {
																"arguments": [
																	{
																		"name": "_contract",
																		"nodeType": "YulIdentifier",
																		"src": "9718:9:1"
																	}
																],
																"functionName": {
																	"name": "extcodesize",
																	"nodeType": "YulIdentifier",
																	"src": "9706:11:1"
																},
																"nodeType": "YulFunctionCall",
																"src": "9706:22:1"
															},
															"variableNames": [
																{
																	"name": "contractSize",
																	"nodeType": "YulIdentifier",
																	"src": "9690:12:1"
																}
															]
														}
													]
												},
												"evmVersion": "london",
												"externalReferences": [
													{
														"declaration": 853,
														"isOffset": false,
														"isSlot": false,
														"src": "9718:9:1",
														"valueSize": 1
													},
													{
														"declaration": 859,
														"isOffset": false,
														"isSlot": false,
														"src": "9690:12:1",
														"valueSize": 1
													}
												],
												"id": 861,
												"nodeType": "InlineAssembly",
												"src": "9673:61:1"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 865,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 863,
																"name": "contractSize",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 859,
																"src": "9747:12:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 864,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "9762:1:1",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "9747:16:1",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 866,
															"name": "_errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 855,
															"src": "9765:13:1",
															"typeDescriptions": {
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														],
														"id": 862,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "9739:7:1",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 867,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9739:40:1",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 868,
												"nodeType": "ExpressionStatement",
												"src": "9739:40:1"
											}
										]
									},
									"id": 870,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "enforceHasContractCode",
									"nameLocation": "9504:22:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 856,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 853,
												"mutability": "mutable",
												"name": "_contract",
												"nameLocation": "9535:9:1",
												"nodeType": "VariableDeclaration",
												"scope": 870,
												"src": "9527:17:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 852,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "9527:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 855,
												"mutability": "mutable",
												"name": "_errorMessage",
												"nameLocation": "9560:13:1",
												"nodeType": "VariableDeclaration",
												"scope": 870,
												"src": "9546:27:1",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 854,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "9546:6:1",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "9526:48:1"
									},
									"returnParameters": {
										"id": 857,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "9589:0:1"
									},
									"scope": 871,
									"src": "9495:289:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 872,
							"src": "127:9659:1",
							"usedErrors": []
						}
					],
					"src": "32:9755:1"
				},
				"id": 1
			}
		}
	}
}