0x610100604052603160a08181529062005c2660c03960129062000023908262000268565b506013805460ff191660011790556101f46014553480156200004457600080fd5b5060405162005c5738038062005c57833981016040819052620000679162000334565b604051806040016040528060098152602001682932b532b1ba34b7b760b91b815250604051806040016040528060098152602001682922a522a1aa24a7a760b91b815250620249f083838383838080620000d0620000ca6200016f60201b60201c565b62000173565b6001600160a01b031660805250600160065581620001405760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b606482015260840160405180910390fd5b50600755600b62000152838262000268565b50600c62000161828262000268565b505050505050505062000366565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001ee57607f821691505b6020821081036200020f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026357600081815260208120601f850160051c810160208610156200023e5750805b601f850160051c820191505b818110156200025f578281556001016200024a565b5050505b505050565b81516001600160401b03811115620002845762000284620001c3565b6200029c81620002958454620001d9565b8462000215565b602080601f831160018114620002d45760008415620002bb5750858301515b600019600386901b1c1916600185901b1785556200025f565b600085815260208120601f198616915b828110156200030557888601518255948401946001909101908401620002e4565b5085821015620003245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200034757600080fd5b81516001600160a01b03811681146200035f57600080fd5b9392505050565b60805161586c620003ba60003960008181610af101528181610d170152818161106301528181611335015281816116400152818161234e015281816128fb01528181612a5e0152613d0a015261586c6000f3fe6080604052600436106103dd5760003560e01c80638ada6b0f1161020d578063b88d4fde11610128578063df2a5b3b116100bb578063eb8d72b71161008a578063f2fde38b1161006f578063f2fde38b14610ca7578063f5ecbdbc14610cc7578063fa25f9b614610ce757600080fd5b8063eb8d72b714610c67578063f235364114610c8757600080fd5b8063df2a5b3b14610bf2578063e43082f714610c12578063e985e9c514610c32578063eac989f814610c5257600080fd5b8063c87b56dd116100f7578063c87b56dd14610b7f578063cbed8b9c14610b9f578063d12473a514610bbf578063d1deba1f14610bdf57600080fd5b8063b88d4fde14610b13578063b8997a9714610b33578063baf3292d14610b49578063c446183414610b6957600080fd5b80639f38369a116101a0578063a6c3d1651161016f578063a6c3d16514610a84578063ab3ffb9314610aa4578063af3fb21c14610ab7578063b353aaa714610adf57600080fd5b80639f38369a14610a0a5780639fbc871314610a2a578063a22cb46514610a4f578063a5bd523514610a6f57600080fd5b80638ffa1f2a116101dc5780638ffa1f2a14610995578063950c8a74146109b557806395d89b41146109d55780639ea5d6b1146109ea57600080fd5b80638ada6b0f146108ff5780638cfd8f5c1461091f5780638da5cb5b146109575780638dc251e31461097557600080fd5b80633f1f4fa4116102fd5780635b8c41e61161029057806370a082311161025f57806370a0823114610864578063715018a6146108845780637533d788146108995780637efc77fa146108b957600080fd5b80635b8c41e6146107bb5780636352211e1461080a57806366ad5c8a1461082a5780636c529a261461084a57600080fd5b80634ac3f4ff116102cc5780634ac3f4ff1461073b578063519056361461076857806355f804b31461077b57806356d3163d1461079b57600080fd5b80633f1f4fa4146106aa57806342842e0e146106e557806342d65a8d14610705578063482881901461072557600080fd5b806310ddb137116103755780632a205e3d116103445780632a205e3d146105f65780632a55205a1461062b5780633d8b38f61461066a5780633e4086e51461068a57600080fd5b806310ddb1371461051357806322a3ecf91461053357806323b872dd146105b657806329406326146105d657600080fd5b8063081812fc116103b1578063081812fc1461047b578063095ea7b3146104b35780630b4cad4c146104d35780630df37483146104f357600080fd5b80621d3567146103e257806301ffc9a71461040457806306fdde031461043957806307e0db171461045b575b600080fd5b3480156103ee57600080fd5b506104026103fd366004614602565b610d14565b005b34801561041057600080fd5b5061042461041f3660046146c4565b610f5c565b60405190151581526020015b60405180910390f35b34801561044557600080fd5b5061044e610f97565b6040516104309190614731565b34801561046757600080fd5b50610402610476366004614744565b611029565b34801561048757600080fd5b5061049b61049636600461475f565b6110cb565b6040516001600160a01b039091168152602001610430565b3480156104bf57600080fd5b506104026104ce366004614798565b6110f2565b3480156104df57600080fd5b506104026104ee36600461475f565b611223565b3480156104ff57600080fd5b5061040261050e3660046147c4565b6112dc565b34801561051f57600080fd5b5061040261052e366004614744565b6112fb565b34801561053f57600080fd5b5061058761054e36600461475f565b600a6020526000908152604090208054600182015460029092015461ffff821692620100009092046001600160a01b0316919060ff1684565b6040805161ffff90951685526001600160a01b0390931660208501529183015215156060820152608001610430565b3480156105c257600080fd5b506104026105d13660046147e0565b61136c565b3480156105e257600080fd5b5061044e6105f1366004614821565b6113f4565b34801561060257600080fd5b5061061661061136600461496a565b6114bc565b60408051928352602083019190915201610430565b34801561063757600080fd5b5061064b6106463660046149f9565b6114e2565b604080516001600160a01b039093168352602083019190915201610430565b34801561067657600080fd5b50610424610685366004614a1b565b611513565b34801561069657600080fd5b506104026106a536600461475f565b6115e0565b3480156106b657600080fd5b506106d76106c5366004614744565b60036020526000908152604090205481565b604051908152602001610430565b3480156106f157600080fd5b506104026107003660046147e0565b6115ed565b34801561071157600080fd5b50610402610720366004614a1b565b611608565b34801561073157600080fd5b506106d760075481565b34801561074757600080fd5b506106d7610756366004614744565b60086020526000908152604090205481565b610402610776366004614a6e565b6116a7565b34801561078757600080fd5b50610402610796366004614b28565b6116be565b3480156107a757600080fd5b506104026107b6366004614b71565b6116d6565b3480156107c757600080fd5b506106d76107d6366004614b8e565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561081657600080fd5b5061049b61082536600461475f565b611845565b34801561083657600080fd5b50610402610845366004614602565b6118aa565b34801561085657600080fd5b506013546104249060ff1681565b34801561087057600080fd5b506106d761087f366004614b71565b61199d565b34801561089057600080fd5b50610402611a37565b3480156108a557600080fd5b5061044e6108b4366004614744565b611a4b565b3480156108c557600080fd5b5060408051808201909152601381527f68747470733a2f2f61727467656e652e78797a00000000000000000000000000602082015261044e565b34801561090b57600080fd5b5060115461049b906001600160a01b031681565b34801561092b57600080fd5b506106d761093a366004614bec565b600260209081526000928352604080842090915290825290205481565b34801561096357600080fd5b506000546001600160a01b031661049b565b34801561098157600080fd5b50610402610990366004614b71565b611ae5565b3480156109a157600080fd5b506104026109b0366004614c16565b611b2c565b3480156109c157600080fd5b5060045461049b906001600160a01b031681565b3480156109e157600080fd5b5061044e611e03565b3480156109f657600080fd5b50610402610a053660046147c4565b611e12565b348015610a1657600080fd5b5061044e610a25366004614744565b611ee4565b348015610a3657600080fd5b5060135461049b9061010090046001600160a01b031681565b348015610a5b57600080fd5b50610402610a6a366004614c4b565b611ff3565b348015610a7b57600080fd5b5061049b611ffe565b348015610a9057600080fd5b50610402610a9f366004614a1b565b61203b565b610402610ab2366004614d01565b6120c4565b348015610ac357600080fd5b50610acc600181565b60405161ffff9091168152602001610430565b348015610aeb57600080fd5b5061049b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b1f57600080fd5b50610402610b2e366004614db7565b6120d3565b348015610b3f57600080fd5b506106d760145481565b348015610b5557600080fd5b50610402610b64366004614b71565b612161565b348015610b7557600080fd5b506106d761271081565b348015610b8b57600080fd5b5061044e610b9a36600461475f565b6121cf565b348015610bab57600080fd5b50610402610bba366004614e23565b612316565b348015610bcb57600080fd5b50610402610bda3660046147c4565b6123c4565b610402610bed366004614602565b61248e565b348015610bfe57600080fd5b50610402610c0d366004614e92565b6126dc565b348015610c1e57600080fd5b50610402610c2d366004614ece565b612796565b348015610c3e57600080fd5b50610424610c4d366004614ee9565b6127cf565b348015610c5e57600080fd5b5061044e61283c565b348015610c7357600080fd5b50610402610c82366004614a1b565b612849565b348015610c9357600080fd5b50610616610ca2366004614f22565b6128a3565b348015610cb357600080fd5b50610402610cc2366004614b71565b612987565b348015610cd357600080fd5b5061044e610ce2366004614f9c565b612a14565b348015610cf357600080fd5b506106d7610d02366004614744565b60096020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610d915760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610daf90614fe9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddb90614fe9565b8015610e285780601f10610dfd57610100808354040283529160200191610e28565b820191906000526020600020905b815481529060010190602001808311610e0b57829003601f168201915b50505050509050805186869050148015610e43575060008151115b8015610e6b575080516020820120604051610e61908890889061503c565b6040518091039020145b610edd5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610d88565b610f538787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612ade92505050565b50505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082161580610f915750610f9182612b84565b92915050565b6060600b8054610fa690614fe9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd290614fe9565b801561101f5780601f10610ff45761010080835404028352916020019161101f565b820191906000526020600020905b81548152906001019060200180831161100257829003601f168201915b5050505050905090565b611031612c26565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b1580156110b057600080fd5b505af11580156110c4573d6000803e3d6000fd5b5050505050565b60006110d682612c80565b506000908152600f60205260409020546001600160a01b031690565b60006110fd82611845565b9050806001600160a01b0316836001600160a01b0316036111865760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b336001600160a01b03821614806111a257506111a281336127cf565b6112145760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610d88565b61121e8383612ce4565b505050565b61122b612c26565b600081116112a05760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d75737420626560448201527f203e2030000000000000000000000000000000000000000000000000000000006064820152608401610d88565b60078190556040518181527ffebbc4f8bb9ec2313950c718d43123124b15778efda4c1f1d529de2995b4f34d906020015b60405180910390a150565b6112e4612c26565b61ffff909116600090815260036020526040902055565b611303612c26565b6040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401611096565b611377335b82612d6a565b6113e95760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610d88565b61121e838383612dc8565b6011546060906001600160a01b0316156114a3576011546040517f294063260000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632940632690611457908890889088908890600401615077565b600060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261149c91908101906150d1565b90506114b4565b506040805160208101909152600081525b949350505050565b6000806114d487876114cd88613009565b87876128a3565b915091509550959350505050565b6000806114ed611ffe565b9150612710601454846115009190615149565b61150a9190615160565b90509250929050565b61ffff83166000908152600160205260408120805482919061153490614fe9565b80601f016020809104026020016040519081016040528092919081815260200182805461156090614fe9565b80156115ad5780601f10611582576101008083540402835291602001916115ad565b820191906000526020600020905b81548152906001019060200180831161159057829003601f168201915b5050505050905083836040516115c492919061503c565b60405180910390208180519060200120149150505b9392505050565b6115e8612c26565b601455565b61121e838383604051806020016040528060008152506120d3565b611610612c26565b6040517f42d65a8d0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d906116799086908690869060040161519b565b600060405180830381600087803b15801561169357600080fd5b505af1158015610f53573d6000803e3d6000fd5b610f538787876116b688613009565b878787613054565b6116c6612c26565b60126116d282826151ff565b5050565b6116de612c26565b306001600160a01b038216036117365760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74206164642073656c662061732072656e646572657200000000006044820152606401610d88565b6001600160a01b03811615806117715750611771817f7e573aea0000000000000000000000000000000000000000000000000000000061324d565b6117e35760405162461bcd60e51b815260206004820152602260248201527f4e6f7420636f6e666f726d7320746f2072656e646572657220696e746572666160448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f9ecad07ead74f2fb52324485432408cf6261ad2454126bb85412492425a8b1d090600090a250565b6000818152600d60205260408120546001600160a01b031680610f915760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610d88565b33301461191f5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a41707000000000000000000000000000000000000000000000000000006064820152608401610d88565b6119958686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061326992505050565b505050505050565b60006001600160a01b038216611a1b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610d88565b506001600160a01b03166000908152600e602052604090205490565b611a3f612c26565b611a4960006133f6565b565b60016020526000908152604090208054611a6490614fe9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9090614fe9565b8015611add5780601f10611ab257610100808354040283529160200191611add565b820191906000526020600020905b815481529060010190602001808311611ac057829003601f168201915b505050505081565b611aed612c26565b601380546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b611b3461345e565b80516020808301919091206000818152600a90925260409091206002015460ff16611ba15760405162461bcd60e51b815260206004820152601160248201527f6e6f20637265646974732073746f7265640000000000000000000000000000006044820152606401610d88565b600082806020019051810190611bb791906152df565b6000848152600a602052604081208054600190910154929450909250611bf39161ffff8216916201000090046001600160a01b031690856134b7565b6000848152600a60205260409020600101549091508111611c7c5760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f7567682067617320746f2070726f636573732063726564697460448201527f207472616e7366657200000000000000000000000000000000000000000000006064820152608401610d88565b81518103611d29576000838152600a602052604080822080547fffffffffffffffffffff000000000000000000000000000000000000000000001681556001810192909255600290910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517fd7be02b8dd0d27bd0517a9cb4d7469ce27df4313821ae5ec1ff69acc594ba23390611d1c9085815260200190565b60405180910390a1611df3565b604080516080810182526000858152600a6020818152848320805461ffff80821687526001600160a01b03620100008084048216868a019081529989018b8152600160608b01818152998f90529790965297519851169096027fffffffffffffffffffff00000000000000000000000000000000000000000000909116969095169590951793909317845591519183019190915551600290910180549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555b505050611e006001600655565b50565b6060600c8054610fa690614fe9565b611e1a612c26565b60008111611e905760405162461bcd60e51b815260206004820152602260248201527f647374436861696e4964546f42617463684c696d6974206d757374206265203e60448201527f20300000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b61ffff8216600081815260086020908152604091829020849055815192835282018390527f7315f7654d594ead24a30160ed9ba2d23247f543016b918343591e93d7afdb6d91015b60405180910390a15050565b61ffff8116600090815260016020526040812080546060929190611f0790614fe9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3390614fe9565b8015611f805780601f10611f5557610100808354040283529160200191611f80565b820191906000526020600020905b815481529060010190602001808311611f6357829003601f168201915b505050505090508051600003611fd85760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610d88565b6115d9600060148351611feb919061539a565b839190613503565b6116d233838361362b565b60135460009061010090046001600160a01b031661202657506000546001600160a01b031690565b5060135461010090046001600160a01b031690565b612043612c26565b818130604051602001612058939291906153ad565b60408051601f1981840301815291815261ffff851660009081526001602052209061208390826151ff565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce8383836040516120b79392919061519b565b60405180910390a1505050565b610f5387878787878787613054565b6120dd3383612d6a565b61214f5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610d88565b61215b84848484613717565b50505050565b612169612c26565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b906020016112d1565b6011546060906001600160a01b03161561230d576011546040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b03169063c87b56dd90602401600060405180830381865afa158015612246573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261226e91908101906150d1565b80519091501561230b576012805461228590614fe9565b80601f01602080910402602001604051908101604052809291908181526020018280546122b190614fe9565b80156122fe5780601f106122d3576101008083540402835291602001916122fe565b820191906000526020600020905b8154815290600101906020018083116122e157829003601f168201915b5050505050915050919050565b505b610f91826137a0565b61231e612c26565b6040517fcbed8b9c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c9061238b90889088908890889088906004016153e6565b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b505050505050505050565b6123cc612c26565b600081116124425760405162461bcd60e51b815260206004820152602360248201527f647374436861696e4964546f5472616e73666572476173206d7573742062652060448201527f3e203000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b61ffff8216600081815260096020908152604091829020849055815192835282018390527fc46df2983228ac2d9754e94a0d565e6671665dc8ad38602bc8e544f0685a29fb9101611ed8565b61ffff861660009081526005602052604080822090516124b1908890889061503c565b908152604080516020928190038301902067ffffffffffffffff87166000908152925290205490508061254c5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f61676500000000000000000000000000000000000000000000000000000000006064820152608401610d88565b80838360405161255d92919061503c565b6040518091039020146125d85760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b61ffff871660009081526005602052604080822090516125fb908990899061503c565b908152604080516020928190038301812067ffffffffffffffff8916600090815290845282902093909355601f88018290048202830182019052868252612694918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061326992505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e587878787856040516126cb959493929190615414565b60405180910390a150505050505050565b6126e4612c26565b600081116127345760405162461bcd60e51b815260206004820152601560248201527f4c7a4170703a20696e76616c6964206d696e47617300000000000000000000006044820152606401610d88565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac0906060016120b7565b61279e612c26565b601380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60135460009060ff16801561280057506001600160a01b038216731e0049783f008a0085193e00003d00cd54003c71145b1561280d57506001610f91565b506001600160a01b03918216600090815260106020908152604080832093909416825291909152205460ff1690565b60128054611a6490614fe9565b612851612c26565b61ffff8316600090815260016020526040902061286f828483615450565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab8383836040516120b79392919061519b565b600080600086866040516020016128bb92919061554b565b60408051601f19818403018152908290527f40a7bb1000000000000000000000000000000000000000000000000000000000825291506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612938908b90309086908b908b90600401615570565b6040805180830381865afa158015612954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297891906155c2565b92509250509550959350505050565b61298f612c26565b6001600160a01b038116612a0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d88565b611e00816133f6565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015612aad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ad591908101906155e6565b95945050505050565b600080612b6e5a60966366ad5c8a60e01b89898989604051602401612b06949392919061561b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915230929190613806565b9150915081611995576119958686868685613891565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612c1757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610f915750610f918261392f565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d88565b6000818152600d60205260409020546001600160a01b0316611e005760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610d88565b6000818152600f6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190612d3182611845565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612d7683611845565b9050806001600160a01b0316846001600160a01b03161480612d9d5750612d9d81856127cf565b806114b45750836001600160a01b0316612db6846110cb565b6001600160a01b031614949350505050565b826001600160a01b0316612ddb82611845565b6001600160a01b031614612e575760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610d88565b6001600160a01b038216612ed25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d88565b826001600160a01b0316612ee582611845565b6001600160a01b031614612f615760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610d88565b6000818152600f6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b03878116808652600e8552838620805460001901905590871680865283862080546001019055868652600d90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106130435761304361565a565b602090810291909101015292915050565b60008451116130a55760405162461bcd60e51b815260206004820152601360248201527f746f6b656e4964735b5d20697320656d707479000000000000000000000000006044820152606401610d88565b8351600114806130c9575061ffff8616600090815260086020526040902054845111155b61313b5760405162461bcd60e51b815260206004820152602260248201527f62617463682073697a65206578636565647320647374206261746368206c696d60448201527f69740000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b60005b845181101561317e5761316c88888888858151811061315f5761315f61565a565b60200260200101516139c6565b8061317681615689565b91505061313e565b506000858560405160200161319492919061554b565b60405160208183030381529060405290506131d9876001848851600960008d61ffff1661ffff168152602001908152602001600020546131d49190615149565b613adb565b6131e7878286868634613bba565b856040516131f591906156a3565b6040518091039020886001600160a01b03168861ffff167fe1b87c47fdeb4f9cbadbca9df3af7aba453bb6e501075d0440d88125b711522a8860405161323b91906156bf565b60405180910390a45050505050505050565b600061325883613d86565b80156115d957506115d98383613dea565b6000808280602001905181019061328091906152df565b601482015191935091506000613298888383866134b7565b905082518110156133a25784516020808701919091206040805160808101825261ffff808d1682526001600160a01b038088168387019081528385018881526001606086018181526000898152600a909a529887902095518654935190941662010000027fffffffffffffffffffff00000000000000000000000000000000000000000000909316939094169290921717835551908201559251600290930180549315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009094169390931790925590517f10e0b70d256bccc84b7027506978bd8b68984a870788b93b479def144c839ad79061339890839089906156d2565b60405180910390a1505b816001600160a01b0316876040516133ba91906156a3565b60405180910390208961ffff167f5b821db8a46f8ecbe1941ba2f51cfeea9643268b56631f70d45e2a745d9902658660405161323b91906156bf565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600654036134b05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d88565b6002600655565b6000825b8251811015612ad5576007545a10612ad5576134f186868584815181106134e4576134e461565a565b6020026020010151613eb9565b806134fb81615689565b9150506134bb565b60608161351181601f6156eb565b101561355f5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610d88565b61356982846156eb565b845110156135b95760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610d88565b6060821580156135d85760405191506000825260208201604052613622565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136115780518352602092830192016135f9565b5050858452601f01601f1916604052505b50949350505050565b816001600160a01b0316836001600160a01b03160361368c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d88565b6001600160a01b0383811660008181526010602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613722848484612dc8565b61372e84848484613f48565b61215b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610d88565b60606137ab82612c80565b60006137b56140e6565b905060008151116137d557604051806020016040528060008152506115d9565b806137df846140f5565b6040516020016137f09291906156fe565b6040516020818303038152906040529392505050565b6000606060008060008661ffff1667ffffffffffffffff81111561382c5761382c614874565b6040519080825280601f01601f191660200182016040528015613856576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115613878578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff168152602001908152602001600020856040516138c291906156a3565b90815260408051918290036020908101832067ffffffffffffffff88166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c90613920908790879087908790879061572d565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f22bac5d9000000000000000000000000000000000000000000000000000000001480610f9157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610f91565b6139cf33611371565b613a415760405162461bcd60e51b815260206004820152602e60248201527f4f4e46543732313a2073656e642063616c6c6572206973206e6f74206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610d88565b836001600160a01b0316613a5482611845565b6001600160a01b031614613ad05760405162461bcd60e51b815260206004820152602260248201527f4f4e46543732313a2073656e642066726f6d20696e636f7272656374206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610d88565b61215b843083612dc8565b6000613ae683614195565b61ffff808716600090815260026020908152604080832093891683529290529081205491925090613b189084906156eb565b905060008111613b6a5760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610d88565b808210156119955760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610d88565b61ffff861660009081526001602052604081208054613bd890614fe9565b80601f0160208091040260200160405190810160405280929190818152602001828054613c0490614fe9565b8015613c515780601f10613c2657610100808354040283529160200191613c51565b820191906000526020600020905b815481529060010190602001808311613c3457829003601f168201915b505050505090508051600003613ccf5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f75726365000000000000000000000000000000006064820152608401610d88565b613cda8787516141f1565b6040517fc58031000000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490613d4b908b9086908c908c908c908c90600401615780565b6000604051808303818588803b158015613d6457600080fd5b505af1158015613d78573d6000803e3d6000fd5b505050505050505050505050565b6000613db2827f01ffc9a700000000000000000000000000000000000000000000000000000000613dea565b8015610f915750613de3827fffffffff00000000000000000000000000000000000000000000000000000000613dea565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613ea2575060208210155b8015613eae5750600081115b979650505050505050565b6000818152600d60205260409020546001600160a01b03161580613f0e57506000818152600d60205260409020546001600160a01b031615158015613f0e575030613f0382611845565b6001600160a01b0316145b613f1757600080fd5b6000818152600d60205260409020546001600160a01b0316613f3d5761121e8282614262565b61121e308383612dc8565b60006001600160a01b0384163b156140de576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290613fa59033908990889088906004016157e7565b6020604051808303816000875af1925050508015613fe0575060408051601f3d908101601f19168201909252613fdd91810190615819565b60015b614093573d80801561400e576040519150601f19603f3d011682016040523d82523d6000602084013e614013565b606091505b50805160000361408b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610d88565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506114b4565b5060016114b4565b606060128054610fa690614fe9565b606060006141028361427c565b600101905060008167ffffffffffffffff81111561412257614122614874565b6040519080825280601f01601f19166020018201604052801561414c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461415657509392505050565b60006022825110156141e95760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610d88565b506022015190565b61ffff82166000908152600360205260408120549081900361421257506127105b8082111561121e5760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610d88565b6116d282826040518060200160405280600081525061435e565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106142c5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106142f1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061430f57662386f26fc10000830492506010015b6305f5e1008310614327576305f5e100830492506008015b612710831061433b57612710830492506004015b6064831061434d576064830492506002015b600a8310610f915760010192915050565b61436883836143e7565b6143756000848484613f48565b61121e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610d88565b6001600160a01b03821661443d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d88565b6000818152600d60205260409020546001600160a01b0316156144a25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d88565b6000818152600d60205260409020546001600160a01b0316156145075760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d88565b6001600160a01b0382166000818152600e6020908152604080832080546001019055848352600d90915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b803561ffff8116811461459c57600080fd5b919050565b60008083601f8401126145b357600080fd5b50813567ffffffffffffffff8111156145cb57600080fd5b6020830191508360208285010111156145e357600080fd5b9250929050565b803567ffffffffffffffff8116811461459c57600080fd5b6000806000806000806080878903121561461b57600080fd5b6146248761458a565b9550602087013567ffffffffffffffff8082111561464157600080fd5b61464d8a838b016145a1565b909750955085915061466160408a016145ea565b9450606089013591508082111561467757600080fd5b5061468489828a016145a1565b979a9699509497509295939492505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0057600080fd5b6000602082840312156146d657600080fd5b81356115d981614696565b60005b838110156146fc5781810151838201526020016146e4565b50506000910152565b6000815180845261471d8160208601602086016146e1565b601f01601f19169290920160200192915050565b6020815260006115d96020830184614705565b60006020828403121561475657600080fd5b6115d98261458a565b60006020828403121561477157600080fd5b5035919050565b6001600160a01b0381168114611e0057600080fd5b803561459c81614778565b600080604083850312156147ab57600080fd5b82356147b681614778565b946020939093013593505050565b600080604083850312156147d757600080fd5b6147b68361458a565b6000806000606084860312156147f557600080fd5b833561480081614778565b9250602084013561481081614778565b929592945050506040919091013590565b6000806000806060858703121561483757600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561485c57600080fd5b614868878288016145a1565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156148cc576148cc614874565b604052919050565b600067ffffffffffffffff8211156148ee576148ee614874565b50601f01601f191660200190565b600061490f61490a846148d4565b6148a3565b905082815283838301111561492357600080fd5b828260208301376000602084830101529392505050565b600082601f83011261494b57600080fd5b6115d9838335602085016148fc565b8035801515811461459c57600080fd5b600080600080600060a0868803121561498257600080fd5b61498b8661458a565b9450602086013567ffffffffffffffff808211156149a857600080fd5b6149b489838a0161493a565b9550604088013594506149c96060890161495a565b935060808801359150808211156149df57600080fd5b506149ec8882890161493a565b9150509295509295909350565b60008060408385031215614a0c57600080fd5b50508035926020909101359150565b600080600060408486031215614a3057600080fd5b614a398461458a565b9250602084013567ffffffffffffffff811115614a5557600080fd5b614a61868287016145a1565b9497909650939450505050565b600080600080600080600060e0888a031215614a8957600080fd5b8735614a9481614778565b9650614aa26020890161458a565b9550604088013567ffffffffffffffff80821115614abf57600080fd5b614acb8b838c0161493a565b965060608a0135955060808a01359150614ae482614778565b90935060a089013590614af682614778565b90925060c08901359080821115614b0c57600080fd5b50614b198a828b0161493a565b91505092959891949750929550565b600060208284031215614b3a57600080fd5b813567ffffffffffffffff811115614b5157600080fd5b8201601f81018413614b6257600080fd5b6114b4848235602084016148fc565b600060208284031215614b8357600080fd5b81356115d981614778565b600080600060608486031215614ba357600080fd5b614bac8461458a565b9250602084013567ffffffffffffffff811115614bc857600080fd5b614bd48682870161493a565b925050614be3604085016145ea565b90509250925092565b60008060408385031215614bff57600080fd5b614c088361458a565b915061150a6020840161458a565b600060208284031215614c2857600080fd5b813567ffffffffffffffff811115614c3f57600080fd5b6114b48482850161493a565b60008060408385031215614c5e57600080fd5b8235614c6981614778565b915061150a6020840161495a565b600067ffffffffffffffff821115614c9157614c91614874565b5060051b60200190565b600082601f830112614cac57600080fd5b81356020614cbc61490a83614c77565b82815260059290921b84018101918181019086841115614cdb57600080fd5b8286015b84811015614cf65780358352918301918301614cdf565b509695505050505050565b600080600080600080600060e0888a031215614d1c57600080fd5b8735614d2781614778565b9650614d356020890161458a565b9550604088013567ffffffffffffffff80821115614d5257600080fd5b614d5e8b838c0161493a565b965060608a0135915080821115614d7457600080fd5b614d808b838c01614c9b565b955060808a01359150614d9282614778565b819450614da160a08b0161478d565b935060c08a0135915080821115614b0c57600080fd5b60008060008060808587031215614dcd57600080fd5b8435614dd881614778565b93506020850135614de881614778565b925060408501359150606085013567ffffffffffffffff811115614e0b57600080fd5b614e178782880161493a565b91505092959194509250565b600080600080600060808688031215614e3b57600080fd5b614e448661458a565b9450614e526020870161458a565b935060408601359250606086013567ffffffffffffffff811115614e7557600080fd5b614e81888289016145a1565b969995985093965092949392505050565b600080600060608486031215614ea757600080fd5b614eb08461458a565b9250614ebe6020850161458a565b9150604084013590509250925092565b600060208284031215614ee057600080fd5b6115d98261495a565b60008060408385031215614efc57600080fd5b8235614f0781614778565b91506020830135614f1781614778565b809150509250929050565b600080600080600060a08688031215614f3a57600080fd5b614f438661458a565b9450602086013567ffffffffffffffff80821115614f6057600080fd5b614f6c89838a0161493a565b95506040880135915080821115614f8257600080fd5b614f8e89838a01614c9b565b94506149c96060890161495a565b60008060008060808587031215614fb257600080fd5b614fbb8561458a565b9350614fc96020860161458a565b92506040850135614fd981614778565b9396929550929360600135925050565b600181811c90821680614ffd57607f821691505b602082108103615036577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183823760009101908152919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b84815283602082015260606040820152600061509760608301848661504c565b9695505050505050565b60006150af61490a846148d4565b90508281528383830111156150c357600080fd5b6115d98360208301846146e1565b6000602082840312156150e357600080fd5b815167ffffffffffffffff8111156150fa57600080fd5b8201601f8101841361510b57600080fd5b6114b4848251602084016150a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610f9157610f9161511a565b600082615196577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b61ffff84168152604060208201526000612ad560408301848661504c565b601f82111561121e57600081815260208120601f850160051c810160208610156151e05750805b601f850160051c820191505b81811015611995578281556001016151ec565b815167ffffffffffffffff81111561521957615219614874565b61522d816152278454614fe9565b846151b9565b602080601f831160018114615262576000841561524a5750858301515b600019600386901b1c1916600185901b178555611995565b600085815260208120601f198616915b8281101561529157888601518255948401946001909101908401615272565b50858210156152af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126152d057600080fd5b6115d9838351602085016150a1565b600080604083850312156152f257600080fd5b825167ffffffffffffffff8082111561530a57600080fd5b615316868387016152bf565b935060209150818501518181111561532d57600080fd5b85019050601f8101861361534057600080fd5b805161534e61490a82614c77565b81815260059190911b8201830190838101908883111561536d57600080fd5b928401925b8284101561538b57835182529284019290840190615372565b80955050505050509250929050565b81810381811115610f9157610f9161511a565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b600061ffff808816835280871660208401525084604083015260806060830152613eae60808301848661504c565b61ffff8616815260806020820152600061543260808301868861504c565b67ffffffffffffffff94909416604083015250606001529392505050565b67ffffffffffffffff83111561546857615468614874565b61547c836154768354614fe9565b836151b9565b6000601f8411600181146154b057600085156154985750838201355b600019600387901b1c1916600186901b1783556110c4565b600083815260209020601f19861690835b828110156154e157868501358255602094850194600190920191016154c1565b50868210156154fe5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081518084526020808501945080840160005b8381101561554057815187529582019590820190600101615524565b509495945050505050565b60408152600061555e6040830185614705565b8281036020840152612ad58185615510565b61ffff861681526001600160a01b038516602082015260a06040820152600061559c60a0830186614705565b841515606084015282810360808401526155b68185614705565b98975050505050505050565b600080604083850312156155d557600080fd5b505080516020909101519092909150565b6000602082840312156155f857600080fd5b815167ffffffffffffffff81111561560f57600080fd5b6114b4848285016152bf565b61ffff851681526080602082015260006156386080830186614705565b67ffffffffffffffff851660408401528281036060840152613eae8185614705565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820361569c5761569c61511a565b5060010190565b600082516156b58184602087016146e1565b9190910192915050565b6020815260006115d96020830184615510565b8281526040602082015260006114b46040830184614705565b80820180821115610f9157610f9161511a565b600083516157108184602088016146e1565b8351908301906157248183602088016146e1565b01949350505050565b61ffff8616815260a06020820152600061574a60a0830187614705565b67ffffffffffffffff86166040840152828103606084015261576c8186614705565b905082810360808401526155b68185614705565b61ffff8716815260c06020820152600061579d60c0830188614705565b82810360408401526157af8188614705565b6001600160a01b0387811660608601528616608085015283810360a085015290506157da8185614705565b9998505050505050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526150976080830184614705565b60006020828403121561582b57600080fd5b81516115d98161469656fea26469706673582212209a77b9cd0fbcc1c1fc6ea53bfb1a71bee3460cfc8e0f1342947fe52d51f6630964736f6c6343000812003368747470733a2f2f6d657461646174612e61727467656e652e78797a2f6170692f672f6572612f72656a656374696f6e2f000000000000000000000000bfd2135bffbb0b5378b56643c2df8a87552bfa23